Mic*_*uce 554
之间的区别--save
和--save-dev
你们有没有试过他们都在自己的项目可能不会立即noticable.所以这里有几个例子......
让我们说你正在建立一个使用当前包来解析和显示日期的应用程序.您的应用程序是一个调度程序,因此它确实需要运行此程序包,如:没有它就无法运行.在这种情况下,你会使用
npm install moment --save
Run Code Online (Sandbox Code Playgroud)
这将在package.json中创建一个新值
"dependencies": {
...
"moment": "^2.17.1"
}
Run Code Online (Sandbox Code Playgroud)
在开发时,使用测试套件等工具确实很有帮助,可能需要jasmine-core和karma.在这种情况下,你会使用
npm install jasmine-core --save-dev
npm install karma --save-dev
Run Code Online (Sandbox Code Playgroud)
这也会在package.json中创建一个新值
"devDependencies": {
...
"jasmine-core": "^2.5.2",
"karma": "^1.4.1",
}
Run Code Online (Sandbox Code Playgroud)
您不需要测试套件以正常状态运行应用程序,因此它是--save-dev
类型依赖项,仅此而已.你可以看到,如果你不理解真正发生的事情,有点难以想象.
直接取自NPM docs docs#dependencies
依赖
依赖关系在将包名称映射到版本范围的简单对象中指定.版本范围是一个字符串,其中包含一个或多个以空格分隔的描述符.也可以使用tarball或git URL识别依赖关系.
请不要在依赖项对象中放置测试工具或转换器.请参阅下面的devDependencies.
即使在文档中,它也会要求您使用--save-dev来获取测试工具等模块.
我希望这有帮助并且很清楚.
Tuo*_* Le 501
--save-dev
用于保存包以用于开发目的.示例:单元测试,缩小..--save
用于保存应用程序运行所需的包.小智 88
默认情况下,NPM只是在node_modules下安装包.当您尝试为应用程序/模块安装依赖项时,您需要先安装它们,然后将它们添加到dependencies
您的部分package.json
.
--save-dev
将第三方包添加到包的开发依赖项中.当有人安装你的包时,它不会被安装.通常只有在某人克隆您的源存储库并npm install
在其中运行时才会安装它.
--save
将第三方包添加到包的依赖项中.只要有人跑,它就会与包一起安装npm install package
.
Dev依赖项是仅在开发包时需要的依赖项.这可以包括测试运行器,编译器,打包器等.两种类型的依赖关系都存储在包的package.json
文件中.--save
添加dependencies
,--save-dev
添加devDependencies
npm安装文档可以在这里参考.
Jac*_*ope 54
一个完美的例子是:
$ npm install typescript --save-dev
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可能希望使用Typescript(一种javascript可解析的编码语言)进行开发,但是一旦部署了应用程序,就不再需要了,因为所有代码都已转换为javascript.因此,将它包含在已发布的应用程序中是没有意义的.实际上,它只会占用空间并增加下载时间.
way*_*boy 33
正如@ andreas-hultgren在这个答案和根据npm文档所建议的那样:
如果有人计划在他们的程序中下载和使用您的模块,那么他们可能不希望或不需要下载和构建您使用的外部测试或文档框架.
但是,对于webapp开发,Yeoman(一个脚手架工具,安装一个经过同行评审,预先编写的package.json文件等)将所有包放在devDependencies中,而不依赖于所有包,因此看起来使用--save-dev
是一个安全的选择至少在webapp开发中.
ale*_*lex 18
--save-dev
将semver规范保存到包描述符文件中的"devDependencies"数组中,--save
将其保存为"依赖项".
小智 18
读完整并忘记--save-dev
头痛
最简单的答案是,当您为其他开发人员--save-dev
创建包并希望将您的包托管在NPM 注册表(如lodash、mongoose、express等)时,这很有用。当您构建或编写节点服务器时,和之间没有区别,因为您的节点服务器实现对您来说是私有的,您永远不会在NPM上发布它。--save
--save-dev
NPM 安装的工作原理
每当我们使用npm安装一个新包(例如npm installexpress)时,NPM都会将该包安装到我们的系统并将其放入node_modules文件夹中,现在NPM将分析新安装的包(即在本例中为express)的package.json文件,分析后NPM将安装Express包的package.json文件的依赖项部分中提到的所有包。安装完express所依赖的包后,NPM再次分析所有新安装的包的package.json文件并再次为它们安装包,这个循环一直持续到所有包都可以进入node_modules文件夹并正常运行。您可以通过在终端中运行npm list来检查包依赖关系,其中终端应指向项目目录的位置。
--save-dev
与上述解释的内容有什么关系
假设您想要创建一个像express这样的新包,现在在开发这个新包时您可能想要编写一些单元测试代码并使用任何其他可用的测试包来测试该包,在这种情况下我们假设是mocha 。现在您知道mocha仅需要测试该包,而不需要使用该包。在这种情况下,您应该使用flag 安装mocha,否则只要开发人员使用NPM安装您的包, NPM就会安装它。因此,如果我们希望当有人从NPM安装我们的软件包时不安装依赖项,我们必须在开发阶段使用该软件包来安装。--save-dev
--save-dev
最后一件事
不要--save-dev
与协作开发混合在一起,如果有人从github等源版本控制系统克隆了你的包代码,那么NPM肯定会安装所有devDependency,即也使用安装的包--save-dev
。
小智 16
当您使用 安装 npm 包时npm install <package-name>
,您将其安装为依赖项。
该包会自动列在package.json
文件中的列表下dependencies
(从 npm 5 开始:在您必须手动指定之前--save
)。
前任。npm install lodash
按 Enter 键后检查您的 package.json 文件。
"dependencies": {
"lodash": "4.x",
},
Run Code Online (Sandbox Code Playgroud)
当您添加-D
标志 或 时--save-dev
,您将其安装为开发依赖项,这会将其添加到devDependencies
列表中。
前任。npm install --save-dev lite-server
按 Enter 键后检查您的 package.json 文件
"devDependencies": {
"lite-server": "^2.6.1"
},
Run Code Online (Sandbox Code Playgroud)
开发依赖项旨在作为仅供开发的包,在生产中不需要。例如测试包、webpack 或 Babel。
当您投入生产时,如果您键入npm install
并且文件夹包含package.json
文件,则会安装它们,因为 npm 假定这是开发部署。
您需要设置--production
标志 ( npm install --production
) 以避免安装这些开发依赖项。
Ari*_*rty 13
让我给你举个例子,
jest
用于测试,而他们使用mocha
。您是否也要安装它们jest
?只是要运行您的库?无权利?这就是为什么他们进入devDependencies
。
当有人这样做时,将仅安装运行您npm i yourPackage
的库所需的库。您以前用来捆绑代码或进行测试和模拟的其他库将不会安装,因为您将它们放入了。很整洁吧?devDependencies
那么,为什么开发人员需要公开devDependancies?
假设您的软件包是一个开源软件包,成百上千的人正在向您的软件包发送请求请求。那么他们将如何测试包装?他们将为git clone
您提供仓库,以及何时npm i
进行依赖以及devDependencies。
因为他们没有使用您的包裹。他们正在进一步开发软件包,因此,为了测试您的软件包,他们需要通过现有的测试用例以及编写新的用例。因此,他们需要使用您的工具devDependencies
,其中包含您使用的所有测试/构建/模拟库。
Ron*_*rer 11
这里的所有解释都很棒,但缺少一个非常重要的东西:如何仅安装生产依赖项?(没有开发依赖项)。我们单独dependencies
从devDependencies
使用--save
或--save-dev
。要安装我们使用的所有内容:
npm i
Run Code Online (Sandbox Code Playgroud)
要仅安装生产包,我们应该使用:
npm i --only=production
Run Code Online (Sandbox Code Playgroud)
已经提供了明确的答案。但是值得一提的是如何devDependencies
影响安装软件包:
默认情况下,npm install将安装所有列为package.json中的依赖项的模块。使用--production标志(或将NODE_ENV环境变量设置为production时),npm将不会安装devDependencies中列出的模块。
请参阅:https://docs.npmjs.com/cli/install
小智 6
通常,您不希望使用仅用于开发目的的东西来夸大生产包。
使用--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
Run Code Online (Sandbox Code Playgroud)
如果打开package.json
文件,则将在两个不同的部分下看到这些条目:
"dependencies": {
"lodash": "4.x",
"moment": "2.x",
"opentracing": "^0.14.1"
},
"devDependencies": {
"jest": "22.x",
"typescript": "^2.8.3"
},
Run Code Online (Sandbox Code Playgroud)
--save-dev用于在应用程序开发中使用的模块,在生产环境中运行时不需要 -save用于将其添加到package.json中,并且是应用程序运行所必需的。
示例:express,body-parser,lodash,helmet,mysql所有这些都在运行应用程序时使用–保存以放置依赖项,而在开发过程中使用mocha,istanbul,chai,sonarqube-scanner,因此将它们放在dev中-依赖性。
npm link或npm install还将在您的项目文件夹中安装dev-dependency模块以及依赖模块
归档时间: |
|
查看次数: |
181045 次 |
最近记录: |