English 中文(简体)
“npm 安装”和“npm ci”之间的区别是什么?
原标题:What is the difference between "npm install" and "npm ci"?

Im与持续融合合作,并发现了npm ci。 指挥。

我无法估计在我的工作流程中使用这一指挥的优势。

是否更快? 这是否使测试更加困难、更oka?

最佳回答

http://docs.npmjs.com/cli/ci"rel=“noreferer”>。

简言之,使用npm安装和Npm ci之间的主要差别是:

  • The project must have an existing package-lock.json or npm-shrinkwrap.json.
  • If dependencies in the package lock do not match those in package.json, npm ci will exit with an error, instead of updating the package lock.
  • npm ci can only install entire projects at a time: individual dependencies cannot be added with this command.
  • If a node_modules is already present, it will be automatically removed before npm ci begins its install.
  • It will never write to package.json or any of the package-locks: installs are essentially frozen.

Essentially, npm install reads package.json to create a list of dependencies and uses package-lock.json to inform which versions of these dependencies to install. If a dependency is not in package-lock.json it will be added by npm install.

<><>>tnpm ci(也称为Clean Install) 系指在自动环境中使用,例如测试平台、持续整合和部署,或者在你想要确保你能够清理你的附属设施的情况下使用。

它直接从<代码> 包装-锁.json上安装了附属设备,并使用<编码> 包装.json,仅确认没有不匹配的版本。 如果任何受扶养人失踪或版本不兼容,将留下错误

使用<代码>npmstal,以增加新的受扶养人,并更新项目的依赖性。 通常,在作出更新受扶养人名单的改动后,在开发过程中,你会利用这一改动,但在这种情况下,使用<编码>npm ci可能是一个好的想法。

Use npm ci if you need a deterministic, repeatable build. For example during continuous integration, automated jobs, etc. and when installing dependencies for the first time, instead of npm install.

npm install

  • Installs a package and all its dependencies.
  • Dependencies are driven by npm-shrinkwrap.json and package-lock.json (in that order).
  • without arguments: installs dependencies of a local module.
  • Can install global packages.
  • Will install any missing dependencies in node_modules.
  • It may write to package.json or package-lock.json.
    • When used with an argument (npm i packagename) it may write to package.json to add or update the dependency.
    • when used without arguments, (npm i) it may write to package-lock.json to lock down the version of some dependencies if they are not already in this file.

npm ci

  • Requires at least npm v5.7.1.
  • Requires package-lock.json or npm-shrinkwrap.json to be present.
  • Throws an error if dependencies from these two files don t match package.json.
  • Removes node_modules and install all dependencies at once.
  • It never writes to package.json or package-lock.json.

Algorithm

While npm ci generates the entire dependency tree from package-lock.json or npm-shrinkwrap.json, npm install updates the contents of node_modules using the following algorithm (source):

load the existing node_modules tree from disk
clone the tree
fetch the package.json and assorted metadata and add it to the clone
walk the clone and add any missing dependencies
  dependencies will be added as close to the top as is possible
  without breaking any other modules
compare the original tree with the cloned tree and make a list of
actions to take to convert one to the other
execute all of the actions, deepest first
  kinds of actions are install, update, remove and move
问题回答

<代码>npm ci将删除任何现有的<代码>node_modules <>/code>,并依靠<编码> 包装-锁.json文档安装每个包裹的具体版本。 安装速度大大快于Npm,因为它绕过一些功能。 它的清洁状态安装对于ci/d管来说是巨大的,而 do子则建起来! 你们还利用这一系统,一劳永逸地安装所有材料,而不是具体包裹。

While everyone else has answered the technical differences none explain in what situations to use both.

You should use them in different situations.

npm install is great for development and in the CI when you want to cache the node_modules directory. When to use this? You can do this if you are making a package for other people to use (you do NOT include node_modules in such a release). Regarding the caching, be careful, if you plan to support different versions of Node.js remember that node_modules might have to be reinstalled due to differences between the Node.js runtime requirements. If you wish to stick to one version, stick to the latest LTS.

npm ci, 当您测试和发布生产申请(最后产品,不供其他产品使用)时,应当使用,因为安装必须尽可能具有决定性性,因此安装时间将更长,但最终将提高申请的可靠性(见node_modules in such a release)。 www.un.org/spanish/ga/president

npm i and npm ci both utilize the npm cache if it exists, this cache lives normally at ~/.npm.

Also, npm ci respects the package-lock.json file. Unlike npm install, which rewrites the file and always installs new versions.

Bonus: 你们可以视你们想要如何复杂而加以组合。 关于<代码>git中的分行,您可浏览node_modules/code>,以提高你的团队生产力,并按合并要求和总经理依据npm ci取得决定性结果。

  • npm ci - install exactly what is listed in package-lock.json
  • npm install - without changing any versions in package.json, use package.json to write package-lock.json, then install exactly what is listed in package-lock.json
  • npm update - similar to npm install but will also install updates for "blurred version" stuff (e.g. *, ^1.2.3)
  • npx npm-check-updates -u; npm install - Will try to update absolutely everything to the latest version. Be careful of breaking changes when using this one.

或者说的是另一种方式:npm ci。 更改0份包裹文档,npmstalnpm Update -u;npmstal,改动2套材料(包装、json和包装24.json)。

您链接的文件摘要:

简言之,使用npm安装和Npm ci之间的主要差别是:

  • The project must have an existing package-lock.json or npm-shrinkwrap.json.
  • If dependencies in the package lock do not match those in package.json, npm ci will exit with an error, instead of updating the package lock.
  • npm ci can only install entire projects at a time: individual dependencies cannot be added with this command.
  • If a node_modules is already present, it will be automatically removed before npm ci begins its install.
  • It will never write to package.json or any of the package-locks: installs are essentially frozen.

指挥在功能上非常相似,但是,在安装你<编码> 包装.json <>/代码>和<代码> 包装-锁.json 文档中规定的附属装置时,差别很大。

<代码>npm ci对贵仪器的所有附属装置进行清洁安装,而npmstal 可在系统上安装某些装置。 如果已安装在该系统上的版本贴上的标签,可能会出现问题。 打算安装,即安装的版本不同于要求的<>/em>版本。

其他差异是<代码>npm ci。 页: 1 如果依赖性版本在<编码> 包装.json和<代码> 包装-锁.json文档中不匹配,它将停止安装并显示错误。

http://docs.npmjs.com/cli/ci.html” rel=“noretinger”here

此外,您不妨阅读关于包装锁的

它安装了干净的装置,在您删除斜角和再运行的<代码>npm i的情况下使用。

I have no idea why some people think it s short for "continuous integration". There is an npm install command that can be run as npm i and an npm clean-install command that can be run as npm ci.

npm install is the command used to install the dependencies listed in a project s package.json file, while npm ci is a command that installs dependencies from a package-lock.json or npm-shrinkwrap.json file. The npm ci command is typically used in continuous integration (CI) environments, where the package-lock.json or npm-shrinkwrap.json file is checked into version control and should not be modified. Because npm ci installs dependencies from a locked file, it is a faster and more reliable way to install dependencies than npm install, which could install different versions of dependencies based on the state of the package.json file.





相关问题
Trying to install Flowise and npm cannot find it

On the https://flowiseai.com/ website, it says that all I have to do to use flowise is the following: npm install -g flowise npx flowise start However, when I try to do the install, it doesn t work....

Cannot destructure property name of node as it is null

when I want to install dependencies of the aurelia project, got this error: npm ERR! code 1 npm ERR! git dep preparation failed npm ERR! command /Users/ehsanghaffarii/.nvm/versions/node/v15.5.1/bin/...

npm install issues on Ubuntu 9.04

I’m trying to install npm using the commands from here: http://howtonode.org/introduction-to-npm Specifically, when I run: curl http://npmjs.org/install.sh | sh This is the error I get... node cli....