–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-devtypes的依赖关系,仅此而已。 你可以看到,如果你不明白到底发生了什么事情,有点难以想象。

直接从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.jsondependencies部分。

--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。 因此,将其包含在已发布的应用程序中是没有意义的。 事实上,它只占用空间并增加下载时间。