最近开始学习Vue,在github上axios的官方安装是:
npm install axios
默认安装在dependencies中了,但是还有一个devDependencies文件夹,好像是开发环境依赖,所以想知道他俩的区别。
主要区别:
除了字面的含义的区别,dependencies和devDependencies的区别还在于:
如果你的项目是发布到npm的一个包,
那么这个包的package.json中的dependencies中的依赖是会被下载下来到这个包的node_modules文件夹中的(如果你的项目本身没有这个依赖),而devDependencies不会。
举个例子:
我发布了一个组件A,它有dependencies:lodash和devDependencies:moment。
那么,如果你的项目npm install 了组件A,除非你的项目也依赖了lodash并且版本一致,
那么项目的node_modules/A下会有一个node_modules,里面会有lodash。
而 moment,则无论如何也不会出现在你的项目中。
至于一般的项目,不管你是安装在dev还是dependencies中,安装的时候都会安装,打包的时候都会被打进去的,区分依赖只是为了让项目看起来更加清晰。
下面是解释:
对于vue,react这样的需要编译的项目,只要import了,webpack就会去你的项目的node_modules找,没找到就去上一层找,一直找,一直找到全局安装的,也没找到,就报错。
npm包之所以要区分dependencies和dev,是因为:
对于vue和react这一类的前端框架而言,大部分都是引用npm包中编译后的代码(min.js),所以不再需要那些依赖了,大多都会放在dev中,方便开发时用到。
而对于一些特殊的包以及一些给node用的npm包而言,它们可能只是去调用了第三方的包。
比如: 我有一个包A,提供了一个time方法,但是实际上我就是去调用了moment的方法。而我又不能保证你的项目也用到了moment,所以我把moment放在A的dependencies中,这样不论何种情况的都能保证调用不会出错了。
附:原文地址