–save和–save-dev有什么区别?
有什么区别:
npm install [package_name] –save
和
npm install [package_name] –save-dev
这是什么意思?
-
--save-dev
用于保存程序包以用于开发目的。 例如:unit testing,缩小 -
--save
用于保存应用程序运行所需的软件包。
如果您在自己的项目上尝试过,那么--save
和--save-dev
之间的区别可能不会立即显现出来。 所以这里有一些例子
比方说,你正在build立一个使用时间包来parsing和显示date的应用程序。 您的应用程序是一个调度程序,所以它确实需要运行该程序包,如下所示: 无法运行 。 在这种情况下,你会使用
npm install moment --save
这会在你的package.json中创build一个新的值
"dependencies": { ... "moment": "^2.17.1" }
当你正在开发时,使用testing套件等工具确实有帮助,可能需要茉莉花的核心和业力 。 在这种情况下,你会使用
npm install jasmine-core --save-dev npm install karma --save-dev
这也会在你的package.json中创build一个新的值
"devDependencies": { ... "jasmine-core": "^2.5.2", "karma": "^1.4.1", }
您不需要testing套件以正常状态运行应用程序,所以它是一个--save-dev
types的依赖关系,仅此而已。 你可以看到,如果你不明白到底发生了什么事情,有点难以想象。
直接从NPM docs docs#dependencies获取
依赖
依赖关系在一个简单的对象中指定,该对象将一个包名称映射到一个版本范围。 版本范围是一个具有一个或多个空格分隔描述符的string。 依赖关系也可以通过tarball或者git URL来识别。
请不要把testing线束或转发器放在你的依赖对象中。 请参阅下面的devDependencies 。
即使在文档中,它也会要求您使用–save-dev模块,例如testing线束。
我希望这有助于并明确。
正如@ andreas-hultgren在这个答案中所build议的,根据npm文档 :
如果有人计划在他们的程序中下载和使用你的模块,那么他们可能不想或者不需要下载和构build你使用的外部testing或者文档框架。
然而,对于webapp开发, Yeoman (一个脚手架工具,安装一个同行评审,预先编写的package.json文件等)将所有软件包放在devDependencies中,而不依赖于任何东西,所以看起来使用--save-dev
至less在webapp开发中是安全的。
默认情况下,NPM只需在node_modules下安装一个包。 当你试图安装你的应用程序/模块的依赖关系时,你需要先安装它们,然后将它们添加到你的package.json
的dependencies
部分。
--save-dev
将第三方软件包添加到软件包的开发依赖项中。 当有人安装你的软件包时,它不会被安装。 通常只有当某人克隆你的源代码库并运行npm install
时才会npm install
。
--save
将第三方软件包添加到软件包的依赖项中。 每当有人运行npm install package
时,它将与软件包一起npm install package
。
开发依赖关系是那些仅仅用于开发包的依赖关系。 这可以包括testing运行器,编译器,打包器等。这两种types的依赖关系都存储在包的package.json
文件中。 --save
添加到dependencies
, --save-dev
devDependencies
--save-dev
添加到devDependencies
可以在这里介绍npm安装文档。
--save-dev
将semver规范保存到包描述符文件中的“devDependencies”数组中, – 将其保存到“依赖”中。
一个完美的例子是:
$ npm install typescript --save-dev
在这种情况下,您希望将Typescript(JavaScript可parsing的编码语言)用于开发,但是一旦部署了应用程序,就不再需要这样做,因为所有的代码都已经被转换为javascript。 因此,将其包含在已发布的应用程序中是没有意义的。 事实上,它只占用空间并增加下载时间。