初次做包安装
-
如果你的项目刚引入composer (
composer init
), 现在是第一次进行包的安装, 也就是只有composer.json文件, 并没有composer.lock文件, 可以, 直接执行composer require 包名 包版本
- 该命令会帮你安装所需的包到
vendor/
目录下 - 生成
composer.json
文件, 并将依赖信息写入文件中 - 生成
composer.lock
文件
- 该命令会帮你安装所需的包到
-
composer将会通过
composer.json
来读取需要的包和相对的版本, 然后创建composer.lock文件
所以,对于除了包版本之外的其他配置, 如自动加载…等,composer.lock
文件不会包含! (所以当改变这些信息之后, install 和 update的效果一样)
非初次安装
- 如果你的项目已经安装过一些包了, 即已经有
composer.json
,composer.lock
文件; -
此时, 你有两种方式:
-
和初次安装一样, 使用
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.
-
-
当然, 你也可以删除
composer.lock
文件, 然后手动在composer.json文件中进行配置, 最后执行composer install
install, require, update都可以做包安装
更新包的方式(require, install, update)对比
-
require虽然是安装, 但也可以用来更新包到指定版本, 并同时更新composer.json和composer.lock文件, 如果没有则会创建!
composer require 包名 新版本
-
当你手动修改了composer.json文件中包的版本之后, 可以执行
composer update
来重新安装该包, 并更新composer.lock文件, 如果没有则会创建!
当然, 你可以指定你需要更新的包composer update 包名, 包名...
-
另外, 还应该注意一下 install 和 update 的一个小细节:
当你修改了composer.json文件, 如果不是对包做增删改(比如增加一个包, 删除一个包, 或者修改包的版本信息), 而是增删改其他信息(比如配置自动加载之类的信息), 那么你使用 install 和 update 是没有区别的!
小结
- install, require, update都可以做包安装 (如果在composer.json中做了像自动加载的信息的配置, install和update会重新进行类关系映射)
- require 和 update 都可以做包更新 (如果在composer.json文件中做了包版本的增删改查, install无法进行更新)
- 另外:
- install: 主要是在部署阶段使用,以便在生产环境和开发环境使用的都是composer.lock文件中相同的依赖项,保证线上部署环境与本地开发环境的一致性。
- update: 主要是在开发阶段使用,根据我们在composer.json文件中指定的内容升级项目的依赖包。
- 此更新非彼更新
比如packagist中的包现在是v2.0, 你本地的是v1.0, 你直接执行composer update
, 不要指望composer会自动帮你更新到v2.0, 要更新你得在composer.json中指明版本号, 然后composer update才会根据composer.json文件去更新!
这样, 至于你的更新是升级还是降级就看你在composer.json文件中如何指定的了!