之间有什么区别?
npm install [package_name]-保存
和
npm install [package_name] --save-dev
这是什么意思?
之间有什么区别?
npm install [package_name]-保存
和
npm install [package_name] --save-dev
这是什么意思?
人们在生产中使用npm来处理邪恶的事情,Node.js就是一个例子,因此您不希望所有开发工具都在运行。
如果您正在使用gulp(或类似产品)来创建要放在服务器上的构建文件,那么这并不重要。
--save-dev用于在应用程序开发中使用的模块,在生产环境中运行时不需要 -save用于将其添加到package.json中,并且是运行应用程序所必需的。
示例:express,body-parser,lodash,helmet,mysql所有这些都在运行应用程序时使用–保存以放置依赖项,而在开发过程中使用mocha,istanbul,chai,sonarqube-scanner,因此将它们放在dev中-依赖性。
npm link或npm install还将在您的项目文件夹中安装dev-dependency模块以及依赖模块
通常,您不希望使用仅用于开发目的的东西来夸大生产包。
使用--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
如果打开package.json
文件,则将在两个不同的部分下看到这些条目:
"dependencies": {
"lodash": "4.x",
"moment": "2.x",
"opentracing": "^0.14.1"
},
"devDependencies": {
"jest": "22.x",
"typescript": "^2.8.3"
},
已经提供了明确的答案。但是值得一提的是如何devDependencies
影响安装软件包:
默认情况下,npm install将安装所有列为package.json中的依赖项的模块。使用--production标志(或将NODE_ENV环境变量设置为production时),npm将不会安装devDependencies中列出的模块。
--save-dev
将semver规范保存到程序包描述符文件中的“ devDependencies”数组中,--save
而是将其保存到“ dependencies”中。
让我给你举个例子,
jest
用于测试,而他们使用mocha
。您是否也要安装它们jest
?只是要运行您的库?无权利?这就是为什么他们进入devDependencies
。
当有人这样做时,将仅安装运行您npm i yourPackage
的库所需的库。您以前用来捆绑代码或进行测试和模拟的其他库将不会安装,因为您将它们放入了。很整洁吧?devDependencies
那么,为什么开发人员需要公开devDependancies?
假设您的软件包是一个开源软件包,并且有数百人正在向您的软件包发送请求请求。那么他们将如何测试包装?他们将为git clone
您提供仓库,以及何时npm i
进行依赖以及devDependencies。
因为他们没有使用您的包裹。他们正在进一步开发软件包,因此,为了测试您的软件包,他们需要通过现有的测试用例以及编写新的测试用例。因此,他们需要使用您的工具devDependencies
,其中包含您使用的所有测试/构建/模拟库。
一个完美的例子是:
$ npm install typescript --save-dev
在这种情况下,您希望可以使用Typescript(一种JavaScript解析的编码语言)进行开发,但是一旦部署了该应用程序,就不再需要了,因为所有代码都已转换为javascript。因此,将其包含在已发布的应用程序中是没有意义的。确实,这只会占用空间并增加下载时间。
默认情况下,NPM只是在node_modules下安装一个软件包。当您尝试为应用程序/模块安装依赖项时,您需要先安装它们,然后将其添加到的dependencies
部分中package.json
。
--save-dev
将第三方程序包添加到程序包的开发依赖项中。当有人安装您的软件包时,将不会安装它。通常只有在有人克隆您的源存储库并npm install
在其中运行时才安装它。
--save
将第三方程序包添加到程序包的依赖项中。每当有人运行时,它将与软件包一起安装npm install package
。
开发依赖项是仅开发软件包所需的那些依赖项。这可以包括测试运行程序,编译器,打包程序等。两种类型的依赖关系都存储在包的package.json
文件中。--save
添加到dependencies
,--save-dev
添加到devDependencies
可以在这里参考npm安装文档。
如果您在自己的项目中都尝试过两者之间的差异--save
,则--save-dev
可能不会立即注意到它们之间的差异。所以这是一些例子...
可以说您正在构建一个使用即时包来解析和显示日期的应用程序。您的应用是一个调度程序,因此它确实需要运行此程序包,例如:没有它就无法运行。在这种情况下,您将使用
npm install moment --save
这将在package.json中创建一个新值
"dependencies": {
...
"moment": "^2.17.1"
}
在您进行开发时,使用测试套件等工具确实会有所帮助,并且可能需要jasmine-core和karma。在这种情况下,您将使用
npm install jasmine-core --save-dev
npm install karma --save-dev
这也会在package.json中创建一个新值
"devDependencies": {
...
"jasmine-core": "^2.5.2",
"karma": "^1.4.1",
}
You do not need the test suite to run the app in its normal state, so it is a --save-dev
type dependency, nothing more. You can see how if you do not understand what is really happening, it is a bit hard to imagine.
Taken directly from NPM docs docs#dependencies
Dependencies
Dependencies are specified in a simple object that maps a package name to a version range. The version range is a string which has one or more space-separated descriptors. Dependencies can also be identified with a tarball or git URL.
Please do not put test harnesses or transpilers in your dependencies object. See devDependencies, below.
Even in the docs, it asks you to use --save-dev for modules such as test harnesses.
I hope this helps and is clear.
--save-dev
用于保存软件包以用于开发目的。示例:单元测试,缩小--save
用于保存应用程序运行所需的软件包。
这里的所有解释都很好,但是缺少一个非常重要的事情:如何仅安装生产依赖项?(没有开发依赖性)。我们单独
dependencies
从devDependencies
使用--save
或--save-dev
。要安装所有我们使用:要仅安装生产软件包,我们应该使用: