有什么区别:

npm install [package_name]

and:

npm install [package_name] --save

and:

npm install [package_name] --save-dev

这是什么意思?——save和-dev关键字的真正作用是什么?


当前回答

——save-dev将semver规范保存到包描述符文件中的“devDependencies”数组中,——save将其保存到“dependencies”数组中。

其他回答

——save-dev将semver规范保存到包描述符文件中的“devDependencies”数组中,——save将其保存到“dependencies”数组中。

正如@andreas-hultgren在这个回答中所建议的,根据npm文档:

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

然而,对于web应用程序开发,Yeoman(一个脚手架工具,用于安装同行评审的预先编写的包)。将所有的包放在devDependencies中,而不是放在dependencies中,所以看起来——save-dev的使用在web应用程序开发中是一个安全的赌注,至少。

人们在生产中使用npm来做一些非常酷的事情,Node.js就是一个例子,所以你不希望所有的开发工具都在运行。

如果您正在使用gulp(或类似)来创建构建文件并将其放到服务器上,那么这并不重要。

我想补充一些我的想法

我认为当别人使用你的代码而不是你自己使用时,所有的差异都会出现

例如,您编写了一个称为节点请求的HTTP库

在你的图书馆里,

你使用lodash来处理字符串和对象,没有lodash,你的代码就不能运行

如果有人将您的HTTP库作为其代码的一部分使用。你的代码会和他的代码一起编译。

你的代码需要lodash,所以你需要放入依赖来编译


如果你写一个项目,比如monaco-editor,它是一个网络编辑器,

你已经使用webpack捆绑了你所有的代码和你的产品env库,当构建完成时,只有一个monaco-min.js

所以有人不关心是——save还是——save-dependencies,他只需要monaco-min.js

简介:

如果有人想编译你的代码(用作库), 将你的代码使用的lodash放入依赖项中 如果有人想在你的代码中添加更多的特性,他需要单元测试和编译器,把这些放到dev-dependencies中

一般来说,您不希望产品包中充斥着只打算用于开发目的的东西。

使用——save-dev(或-D)选项来分离单元测试框架(jest, jasmine, mocha, chai等)等包。

你的应用需要用于生产的任何其他包都应该使用——save(或-S)来安装。

npm install --save lodash       //prod dependency
npm install -S moment           // "       "
npm install -S opentracing      // "       "

npm install -D jest                 //dev only dependency
npm install --save-dev typescript   //dev only dependency

如果你打开包裹。Json文件,然后你会看到这些条目列出在两个不同的部分:

"dependencies": {
  "lodash": "4.x",
  "moment": "2.x",
  "opentracing": "^0.14.1"
},

"devDependencies": {
    "jest": "22.x",
    "typescript": "^2.8.3"
},