有什么区别:

npm install [package_name]

and:

npm install [package_name] --save

and:

npm install [package_name] --save-dev

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


当前回答

as——save是npm的默认选项,所以我使用

npm i package 

还有,我用的是

npm i package -D

默认选项将安装包作为项目依赖项,其中as -D为开发依赖项,如测试,lint等,并为开发过程安装包

你可以在这里找到所有的标志https://docs.npmjs.com/cli/v8/commands/npm-install

其他回答

默认情况下,NPM只是在node_modules下安装一个包。当你试图为你的app/模块安装依赖项时,你需要先安装它们,然后将它们添加到package.json的依赖项部分。

——save-dev将第三方包添加到包的开发依赖项中。当有人直接运行npm install来安装你的包时,它不会被安装。通常只有当有人先克隆你的源存储库,然后在其中运行npm install时才会安装它。

——save将第三方包添加到包的依赖项中。当有人运行npm install package时,它将与包一起安装。

开发依赖项是那些只在开发包时需要的依赖项。这可以包括测试运行器、编译器、打包器等。 这两种类型的依赖关系都存储在包的包中。json文件。——save-dev添加到devDependencies

NPM安装文档可以参考这里。

--

请注意——save现在是默认选项,从NPM 5开始。因此,不再显式地需要它。不使用——save命令也可以运行npm install来达到同样的效果。

当你使用npm install <package-name>安装一个npm包时,你将它作为一个依赖项安装。

该包将自动列在包中。Json文件,在依赖项列表下(从NPM 5开始:在你必须手动指定-save之前)。 例:NPM安装lodash 按回车键后检查您的包。json文件。

"dependencies": {
    "lodash": "4.x",  
},

当您添加-D标志或——save-dev时,您正在将其作为开发依赖项安装,这将其添加到devDependencies列表中。

示例:NPM install——save-dev lite-server 按回车键后检查您的包。json文件

"devDependencies": {
    "lite-server": "^2.6.1"
},

开发依赖关系是仅用于开发的包,在生产环境中不需要。例如测试包、webpack或Babel。

当你进入生产环境时,如果你输入npm install并且文件夹中包含一个包。Json文件,它们被安装,因为NPM假设这是一个开发部署。

你需要设置——production标志(npm install——production)来避免安装那些开发依赖项。

让我给你们举个例子,

你是一个非常严肃的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.

——save-dev将semver规范保存到包描述符文件中的“devDependencies”数组中,——save将其保存到“dependencies”数组中。

一个完美的例子是:

$ npm install typescript --save-dev

在这种情况下,你会希望使用Typescript(一种可解析javascript的编码语言)进行开发,但一旦应用被部署,就不再需要Typescript了,因为所有的代码都已转译为javascript。因此,将它包含在已发布的应用程序中毫无意义。事实上,它只会占用空间并增加下载时间。