"npm install" 中的 "--save" 标志是什么意思?

205

我看到安装软件包的指令,要么是

npm install <package_name>
或者
npm install <package_name> --save
npm install <package_name> --save-dev
这些选项有什么区别?
3个回答

232

更新,2019:

自从此问题被提出以来,npm发生了变化,--save已成为默认选项,因此您不需要使用--save来更新依赖项。


原始回答:

npm install <package_name> --save安装软件包并更新package.json中的依赖项。

npm install <package_name> --no-save安装软件包但不会更新package.json中列出的依赖项。

npm install <package_name> ---save-dev更新package中的devDependencies。这些仅用于本地测试和开发。

更多信息请参见https://docs.npmjs.com/getting-started/using-a-package.json


31
这是我在谷歌搜索“npm --save标志”的最佳答案。请考虑使用正确的信息更新它,即--save现在是默认设置,--no-save是必需的,以便不更新package.json中的依赖列表。 - Jonas Rosenqvist
我想阅读一篇关于为什么“--no-save”直到最近才成为默认选项的文章或简介。更多的错误和不一致行为是为了什么,为了节省磁盘空间吗? - JoseHdez_2
感谢您更新答案以反映--save是默认设置。我看到很多教程和资料都在使用该标志,因为我对npm非常陌生,所以我不记得它不是默认设置的时候了,我开始想知道这是怎么回事。;) - Chris Walker

64

npm install有三个独占的可选标志,可以在主要的package.json文件中保存或更新包版本:

-S, --save: 包将出现在您的dependencies中。

-D, --save-dev: 包将出现在您的devDependencies中。

-O, --save-optional: 包将出现在您的optionalDependencies中。

当使用以上任何选项将依赖项保存到您的package.json时,还有一个额外的可选标志:

-E, --save-exact: 保存的依赖项将配置为精确版本,而不是使用npm的默认semver范围运算符。此外,如果您有一个npm-shrinkwrap.json文件,它也将被更新。

<scope>是可选的。该包将从与指定范围相关联的注册表中下载。如果没有与给定范围关联的注册表,则假定默认注册表。请参阅npm-scope。

注意:如果您在范围名称上不包括@符号,则npm将将其解释为GitHub存储库,如下所示。范围名称后面也必须跟着斜杠。

示例:

npm install sax --save
npm install githubname/reponame
npm install @myorg/privatepackage
npm install node-tap --save-dev
npm install dtrace-provider --save-optional
npm install readable-stream --save --save-exact

注意:如果当前工作目录中有名为<name>的文件或文件夹,则会尝试安装该文件或文件夹,仅在无效时才尝试按名称获取软件包。
(来自官方文档)https://docs.npmjs.com/cli/install

55
虽然 --save 选项仍然可以使用,但不再是必需的 - 现在默认情况下包会被保存到依赖项中。逻辑现在被倒转了 - 如果您不想保存您的包,您需要指定 --no-save - Coruscate5
谢谢,@Coruscate5 正确回答了我的问题。 - Kon

52

--save标志不再有用。

之前,正如其他答案所指出的那样,--save标志会更新项目的package.json文件中的依赖关系,但现在npm install默认包含此功能。

现在如果要防止npm install保存依赖项,则必须使用--no-save标志。

感谢Coruscate5在他们的评论中提到这一点。

更多信息请参见npm-install文档

默认情况下,npm install将任何指定的软件包保存到依赖项中。另外,您可以通过一些额外的标志来控制它们的保存位置和方式:

-P,--save-prod:软件包将出现在您的依赖项中。除非存在-D或-O,否则这是默认设置。

-D,--save-dev:软件包将出现在您的devDependencies中。

-O,--save-optional:软件包将出现在您的optionalDependencies中。

--no-save:防止保存到依赖项中。

使用上述任何选项将依赖项保存到您的package.json时,有两个额外的可选标志:

-E, --save-exact: 保存的依赖项将配置为精确版本,而不使用npm默认的semver范围运算符。

-B, --save-bundle: 保存的依赖项也将添加到您的bundleDependencies列表中。


1
感谢您更新的答案以涵盖当前情况。 - DrCord
这解决了我长期以来的疑惑。谢谢。 - Alok Ranjan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接