安装包的方式(require, install, update)对比

初次做包安装

  1. 如果你的项目刚引入composer (composer init), 现在是第一次进行包的安装, 也就是只有composer.json文件, 并没有composer.lock文件, 可以, 直接执行 composer require 包名 包版本

    • 该命令会帮你安装所需的包到 vendor/ 目录下
    • 生成 composer.json 文件, 并将依赖信息写入文件中
    • 生成 composer.lock 文件
  2. composer将会通过composer.json来读取需要的包和相对的版本, 然后创建composer.lock文件
    所以,对于除了包版本之外的其他配置, 如自动加载…等, composer.lock 文件不会包含! (所以当改变这些信息之后, install 和 update的效果一样)

非初次安装

  1. 如果你的项目已经安装过一些包了, 即已经有 composer.jsoncomposer.lock 文件;
  2. 此时, 你有两种方式:

    • 和初次安装一样, 使用 composer require 包名 包版本 进行安装

    • 手动在composer.json文件中进行配置, 然后运行 composer update
      注意, 此时不能使用 composer install, 因为该命令是依据 composer.lock 文件来进行安装的, 而composer.lock文件又是依据composer.json文件中的包及包版本信息生成的,
      而此时你改变了 composer.json 文件, 并且是新增了一个包(及版本对应关系), 所以你需要更新 composer.lock 文件!

      如果你执行的是 composer install, 则会警告: Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.

  3. 当然, 你也可以删除 composer.lock 文件, 然后手动在composer.json文件中进行配置, 最后执行 composer install

install, require, update都可以做包安装

更新包的方式(require, install, update)对比

  1. require虽然是安装, 但也可以用来更新包到指定版本, 并同时更新composer.json和composer.lock文件, 如果没有则会创建!
    composer require 包名 新版本

  2. 当你手动修改了composer.json文件中包的版本之后, 可以执行 composer update 来重新安装该包, 并更新composer.lock文件, 如果没有则会创建!
    当然, 你可以指定你需要更新的包 composer update 包名, 包名...

  3. 另外, 还应该注意一下 install 和 update 的一个小细节:
    当你修改了composer.json文件, 如果不是对包做增删改(比如增加一个包, 删除一个包, 或者修改包的版本信息), 而是增删改其他信息(比如配置自动加载之类的信息), 那么你使用 install 和 update 是没有区别的!

小结

    1. install, require, update都可以做包安装 (如果在composer.json中做了像自动加载的信息的配置, install和update会重新进行类关系映射)
    2. require 和 update 都可以做包更新 (如果在composer.json文件中做了包版本的增删改查, install无法进行更新)
    3. 另外:
      • install: 主要是在部署阶段使用,以便在生产环境和开发环境使用的都是composer.lock文件中相同的依赖项,保证线上部署环境与本地开发环境的一致性。
      • update: 主要是在开发阶段使用,根据我们在composer.json文件中指定的内容升级项目的依赖包。
    4. 此更新非彼更新
      比如packagist中的包现在是v2.0, 你本地的是v1.0, 你直接执行 composer update, 不要指望composer会自动帮你更新到v2.0, 要更新你得在composer.json中指明版本号, 然后composer update才会根据composer.json文件去更新!
      这样, 至于你的更新是升级还是降级就看你在composer.json文件中如何指定的了!
posted @ 2018-03-15 16:14  iceman!  阅读(614)  评论(0编辑  收藏  举报