npm install 中的 --save 和 --save-dev 有啥区别?

Posted

技术标签:

【中文标题】npm install 中的 --save 和 --save-dev 有啥区别?【英文标题】:What's the difference between --save and --save-dev in npm install?npm install 中的 --save 和 --save-dev 有什么区别? 【发布时间】:2016-02-03 22:21:17 【问题描述】:

我试图了解何时何地使用这些标签,我知道一个用于开发依赖项,另一个用于项目依赖项,但是当将其用于实时项目时,我没有找到任何差异。 我正在寻找一种方法,它会为错误的安装类型引发错误。 有没有办法做到这一点?

【问题讨论】:

重复***.com/questions/22891211/… 【参考方案1】:

dependencies 是您的项目所依赖的模块,devDependencies 是您用于开发项目的模块。您可以阅读npmjs website上的详细说明:

如果有人计划在他们的 程序,那么他们可能不想或不需要下载和构建 您使用的外部测试或文档框架。

在这种情况下,最好将这些附加项目映射到 devDependencies 对象。

依赖关系示例:requestconcat-streamobject.assignthrough2

devDependencies 示例:mochatapeeslintgruntbrowserify

每当您的项目安装或初始化时,总是会安装依赖项,它们是您的项目正常运行所必需的。 devDependencies 仅用于开发(测试框架、任务运行器……),并且仅当有人从项目的根目录运行 npm install 时才会安装它们。例如,在克隆项目存储库之后。

您可以轻松地验证这一点。假设我在同一目录中有模块 foobarbazquux。让foo 成为baz 的依赖项,bar 成为baz 的 devDependency,baz 本身就是quux 的依赖项。

#/$ cd baz
#/baz$ cat package.json

  "name": "baz",
  "version": "0.0.0",
  "dependencies": 
    "foo": "../foo"
  ,
  "devDependencies": 
    "bar": "../bar"
  

#/baz$ npm install
baz@0.0.0 /tmp/tmpdir/g6jBr9/baz
├── bar@0.0.0
└── foo@0.0.0

如您所见,依赖项和 devDependencies 都已安装。

现在让我们安装baz 作为quux 的依赖项:

#/$ cd quux
#/quux$ cat package.json

  "name": "quux",
  "version": "0.0.0",
  "dependencies": 
    "baz": "../baz"
  

#/quux$ npm install
#/quux$ npm ls
quux@0.0.0 /tmp/tmpdir/g6jBr9/quux
└─┬ baz@0.0.0
  └── foo@0.0.0

请注意,foo 已安装,但 bar 未安装。这是因为如果您需要某个模块作为另一个模块的依赖项(即您是该模块的 consumer),则不需要它的 devDependencies,因为模块运行不需要它们.

【讨论】:

非常感谢,将内容如此精心和准确地呈现出来。 这太棒了 eush77!非常感谢!【参考方案2】:

npm install 默认会同时安装 devDependencies 和依赖项。您需要使用特定的标志/设置来忽略 devDependencies 进行安装。来自npm help install

With the --production flag (or when the NODE_ENV environment variable
       is set to production), npm will not install modules listed in
       devDependencies.

当您需要应用程序的主要部分使用或生产所需的重要内容时,显然不要使用--save-dev 或添加到devDependencies。 devDependencies 通常只用于测试和构建之类的事情。

老实说,我认为使用devDependencies 并没有太大的好处。排除它们将为您节省最少的空间和时间。使用它,你冒着排除重要依赖的风险。我并不是说不要使用它——只是建议对于某些项目你可能不需要担心它。

【讨论】:

如果我为项目安装依赖项,使用--save-dev 说“myProject”,然后使用--save-dev 为“mySuperProject”安装 myProject。 myProject 会不会正常运行?

以上是关于npm install 中的 --save 和 --save-dev 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

npm install -save 和npm install -save-dev 给你好看

npm install --save 和 npm install -d的区别

npm install cypress vs npm install cypress --save-dev

Yarn 中“npm install --save”的等价物是啥?

npm install --save 和 --save-dev

NPM install -save 和 -save-dev 傻傻分不清