npm引入模块时 --save 与 --save-dev 的区别

前话

nodejs创建模块很简单,这里我创建一个模块叫做demo,先建一个文件夹命名demo,然后命令行下 npm init ,填写相应信息即可。

这时,我们可以看到文件夹内自动生成了一个配置文件 package.json

内容如下:

1
2
3
4
5
6
7
8
9
10
11
{
"name": "demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "pwcong",
"license": "ISC"
}

如果我们的模块需要引入其他模块,例如 m2h,我们可以命令行执行如下命令:

1
npm install m2h

这样我们就可以在开发中使用m2h模块的相应方法。

但是,当模块开发完成后发布出去被其他人引入时,因为你的配置文件没有填写相应的依赖信息,导致其他人只引入了demo模块的代码文件,而没有引入m2h模块的代码文件,因此出错。

因此,我们引入m2h模块时,应当使用如下命令:

1
npm install m2h --save

命令执行完毕后,npm会自动更新package.json配置文件,更新后内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"name": "demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"m2h": "^1.0.2"
}
}

可以看到多了 dependencies这个依赖配置信息。

好了,上面废话这么多,我们进入正题,–save 和 –save-dev 的区别。

就上面的例子,为什么是 npm install m2h --save 而不是 npm install m2g --save-dev呢?

如果执行第二个,就会多一个 devDependencies 的依赖配置信息。

两者区别

–save-dev 是你开发时候依赖的东西,–save 是你发布之后还依赖的东西。

这便是两者的区别。

比如:

  • 我的js代码是ES6规范的,在当前浏览器中并未普及,因此我需要将js代码编成ES5。
    这时我就需要引入babel模块,因为只有在编译时需要babel模块,在发布代码后就不需要了,因此在引入babel模块时我们用 ‘npm install babel-core –save-dev’

  • 如果我用了 jQuery,由于发布之后还是依赖jQuery,所以是 ‘npm install jquery –save’