这俩字段语义不一样。
'devDependencies' 是说,开发此项目的时候你会用到的任何包,一般是工具类包比如各大 CLI 框架打包工具, package.json scripts 里要用到的一些命令行工具,以及测试框架工具之类的。这个字段的用途是记录开发这个项目过程中需要用到哪些包,你在清除 node_modules 的时候或者别人 git clone 你的项目的时候能轻松还原你的开发环境。
'dependencies' 是说,你这个项目作为一个 npm 包给别人用的时候,在运行时还需要依赖什么其他的包才能满足你的运行要求。前提是你的这个项目是打算以 npm 包的形式发布到某个 registry 给别人用的(或者本地 npm link)。 这个字段里声明的依赖会在别人安装你的时候被一并安装进来,而且这个过程是递归的。不管别人把你当作 dependence 还是 devDependence 安装。
综上:
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
没什么影响。
这两个字段本意是为了加快项目下载依赖速度的。
比如可能存在单元测试、代码格式化等依赖项插件,这些依赖项对于这个项目本身而言并不是导入的模块,而是在开发时才需要用到,那么对于仅仅想运行一下项目、而非要开发项目的人来说,也必须
npm install
一遍。可你要知道npm
早期版本可是以安装慢著称的(虽然从 npm 5.0 之后已经有很大改善了)。所以搞出来了两个字段,如果只是想跑一遍项目,那么
npm install --production
就好了,这样只会下载安装dependencies
里的依赖项。但对于现在的前端来说,如果不是工具库的开发者,那么 Webpack 一类的 Bundle 工具基本就是必需品(Vue、React,三大框架中的俩依赖于此)。你说
babel
之类的依赖项,算dependencies
里吧可你又的确没在项目里import Babel from 'babel'
过;算devPependencies
里吧可你真要npm install --production
不安装它的话项目还是跑不起来。所以这俩字段就变成了一个比较鸡肋的存在。一般来说的话,在运行阶段依赖的项,放到
dependencies
里;仅仅在开发、测试、编译阶段依赖的项,放到devPependencies
。遵循这个原则就可以了。P.S. 中文网络上会流传一些错误的说法,比如 Webpack 不会打包
devPependencies
下的代码啊 balabala,对此我的建议是:不要搜中文技术文章,全是错的还互相抄。