安装包的方式(require, install, update)对比
初次做包安装
- 
如果你的项目刚引入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文件中如何指定的了!
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号