npm安装中--save和--save-dev之间的区别是什么?

时间:2015-11-03 16:46:13

标签: node.js npm

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

2 个答案:

答案 0 :(得分:13)

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

  

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

     

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

依赖项示例:requestconcat-streamobject.assignthrough2

devDependencies示例:mochatapeeslintgruntbrowserify

无论何时安装或初始化项目,都始终安装

依赖项,项目运行时需要它们。 devDependencies仅用于开发(测试框架,任务运行器......),只有当某人从项目的根目录运行npm install时才会安装它们。例如,在克隆项目存储库之后。

您可以轻松验证。假设我在同一目录中有模块foobarbazquux。假设foobaz的依赖关系,barbaz的开发依赖关系,而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未安装。这是因为如果您需要某个模块作为另一个模块的依赖项(即您是该模块的使用者),则您不需要其devDependencies,因为模块不需要它们发挥作用。

答案 1 :(得分:3)

默认情况下,

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并没有太大的好处。排除它们将为您节省最少的空间和时间。使用它,您将面临排除重要依赖关系的风险。我不是说使用它 - 只是建议对于某些项目你可能不需要担心它。