npm ci vs npm i
通过 npm ci
和 npm i
两个命令,都可安装项目的依赖。那么这两个命令有什么区别呢?
几个关键区别:
-
目的和用途:
-
npm ci
:根据项目中的package-lock.json
文件来安装确切的依赖版本,忽略package.json
中的^
和~
等符号。这确保了每次安装的依赖项版本都是一致的,非常适合自动化环境。 -
npm install
(或npm i
):用于在开发环境或其他非CI/CD环境中安装依赖项。它会根据package.json
中的依赖规范(比如^
和~
)来安装符合条件的最新版本 。安装完毕后,生成的package-lock.json
文件会记录实际安装的依赖版本。
-
-
安装速度和效率:
npm ci
比npm install
更快,因为它不需要解析和处理^
和~
等符号,而是直接依据锁定的版本号安装依赖。它还会跳过生成的node_modules
目录中已存在的依赖项,从而节省时间。
-
用法限制:
npm ci
不会写入或更新package-lock.json
文件。它专注于使用当前已有的锁定文件来安装依赖,以确保环境的一致性和可预测性。
综上所述,选择使用 npm ci
还是 npm install
取决于你的具体需求和环境。在CI/CD环境中,特别是为了保证依赖的一致性和安装的速度,推荐使用 npm ci
。在开发环境或需要灵活控制依赖版本的情况下,可以使用 npm install
。
npm ci 保证了依赖的一致性和可预测性,适合CI/CD环境。npm install 则无法保证。
yarn 和 pnpm 有类似的命令吗?
没有,通过自定义脚本来实现类似的功能。
yarn
json
{
"scripts": {
"preci": "rm -rf node_modules",
"ci": "yarn install --frozen-lockfile"
}
}
pnpm
json
{
"scripts": {
"ci": "pnpm install --frozen-lockfile"
}
}
该选择哪个?
- 如果你是在CI/CD环境中,推荐使用
npm ci
以确保依赖的一致性和安装的速度。 - 要是开发环境下希望保持版本和同事的一样,也可以使用
npm ci
。但是,如果你需要灵活控制依赖版本,或者需要更新package-lock.json
文件,那么npm install
会更适合。