CI环境上的npm优化
# CI环境上的npm优化及更多工程化相关问题解析
# CI环境上的npm ci特点
- npm ci要求项目中必须存在package-lock.json(npm v5.x新增)或npm-shrinkwrap.json(早期npm的方式)
- npm ci完全依据package-lock.json安装依赖
- 由于上述原因,npm ci在执行安装时,会先删除项目中现有的node_modules,然后重新安装。
- npm ci只能一次安装整个项目所有依赖包,无法安装单个依赖包。
- 如果package-lock.json和package.json冲突,则npm ci会直接报错,而不是更新lockfiles(package-lock.json或yarn.lock)。
- npm ci不会改变package.json和package-lock.json。
优化:在CI环境使用npm ci代替 npm install。
# 为什么要lockfiles?
package-lock.json的好处:锁定依赖安装结构,缓存了每个包的具体版本和下载链接,不需要再去远程仓库进行查询。保证了在任意机器执行npm install 都会得到相同的node_modules。
如果仅package.json,则不同的npm版本,安装策略不同。另外,如果依赖自上次安装依赖,发布了新版本,则会进行更新(如果是主版本,不会更新)。
# 要不要提交lockfiles到仓库?
看项目决定。
- 如果是业务开发,建议提交。
- 如果是开发外部库,则不需要,此时可以复用主项目加载过的包,减少依赖重复和体积。
- 开发库时,如果必须使用某个特定版本的依赖,更好的方式是使用peerDependencies。
# 为什么有peerDependencies?
- 插件不能独立运行
- 插件正确运行的前提是核心依赖库安装
- 但不希望每次都下载核心依赖库,如果有就直接用
- 插件API的设计必须符合核心依赖库的插件编写规范
- 同一插件体系下,核心依赖库版本最好相同
# 最佳实践
- 使用npm v5.4.2以上版本。
- 搭建项目时,使用npm install <package>安装依赖,提交package.json和package-lock.json,不提交node_modules。
- 使用 npm update 升级到最新的小版本
- 使用npm install <package>@<version>升级大版本或降级
- 也可以手动修改package.json中的版本号,执行npm install升级
- 使用npm uninstall <package> 删除依赖
- 不要手动修改package-lock.json
- 如果有冲突,或者package-lock.json有问题,先删除package-lock.json,然后拉取远程lockfiles,再执行npm install。
上次更新: 2022/06/09, 14:31:48