有什么区别:

npm install [package_name]

and:

npm install [package_name] --save

and:

npm install [package_name] --save-dev

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


当前回答

我想补充一些我的想法

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

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

在你的图书馆里,

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

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

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


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

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

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

简介:

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

其他回答

——save-dev(只用于开发,不用于生产) ——save(生产依赖项) ——global或-g(全局使用,即可以在本地系统的任何地方使用)

让我给你们举个例子,

你是一个非常严肃的npm库的开发者,它使用不同的测试库来测试包。 用户下载您的库,并希望在他们的代码中使用它。他们也需要下载您的测试库吗?也许你用笑话来测试,而他们用摩卡。你想让他们也安装笑话吗?只是为了管理你的图书馆?

不。对吧?这就是为什么它们在devDependencies中。

当有人这样做时,npm i yourPackage只会安装运行你的库所需的库。你用来捆绑代码或测试和模拟的其他库将不会被安装,因为你把它们放在了devDependencies中。很简洁,对吧?

那么,为什么开发人员需要公开devdependencies呢?

Let's say your package is an open-source package and 100s of people are sending pull requests to your package. Then how they will test the package? They will git clone your repo and when they would do an npm i the dependencies as well as devDependencies. Because they are not using your package. They are developing the package further, thus, in order to test your package they need to pass the existing test cases as well write new. So, they need to use your devDependencies which contain all the testing/building/mocking libraries that YOU used.

基本上我们写

npm install package_name

但特别为了测试目的,我们不需要在应用程序运行在正常状态下运行一些包,因此Node引入了很好的方法来解决这个问题。每当我们写作时

npm install package_name --save-dev

当时,该包仅用于开发目的而安装。

已经给出了明确的答案。但是值得一提的是devDependencies是如何影响安装包的:

默认情况下,npm install将安装package中列出的所有依赖项。json。使用——production标志(或者当NODE_ENV环境变量被设置为production时),npm将不会安装devDependencies中列出的模块。

参见:https://docs.npmjs.com/cli/install

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

使用——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"
},