lock 文件使用
很多同学经常会遇到老项目自己跑的很好新来的同学跑不起来的问题。这都是项目未使用 lock 文件导致的 有些代码只能用固定的版本下使用的情况
npm 6.0 以上的使用 package-lock.json
-
.npmrc
配置项目根路径并设置好稳定源(如 taobao) -
npm install
命令会根据 nrm 或.npmrc 配置 生成(未生成 lock 文件时)或更改package-lock.json
的包下载源地址 -
npm install
命令只能由开发组长执行 -
package.json
内容和package-lock.json
内容由项目开发组长精心维护 -
npm ci
成为了组员安装依赖或上线部署使用的命令 -
npm i -S ${私服包名} --registry ${私服地址}
私有包应直接使用指明仓库位置避免频繁使用 nrm 切换仓库 -
package-lock.json
文件应提交到 git 中
npm 6.0 以下的使用 npm-shrinkwrap.json
比较旧的项目或不确定全员 npm 版本的应使用 npm-shrinkwrap.json
npm shrinkwrap
在依赖完整的项目中执行shrinkwrap
会将 package-lock.json 改为npm-shrinkwrap.json
npm-shrinkwrap.json
应提交到 git 中- 避免经常切换 npm 源造成 lock 文件内容变更
npm install
会修改 lock 文件,安装依赖需谨慎
yarn 使用 yarn.lock
- yarn.lock 自带锁库属性
- yarn.lock 应提交到 git 中
yarn --frozen-lockfile
类似于npm ci
,可用于持续集成环境
免 lock 终极大法
去掉 package.json
dependencies
的^ ~前缀,使用固定版本
一种特殊场景
有些项目中安装了私服包,其他人第一次安装项目依赖时,如果不使用私服源,会提示找不到私服包,此时如果使用npm i -S ${私服包名} --registry ${私服地址}
单独安装私服包,又有可能会改变 lock 文件,造成锁库文件的改变。因此这种场景下,为了保证安装依赖版本的一致性,应该使用 nrm
切换至私服源,然后使用 npm ci
命令进行安装。