前端运行时依赖(dependencies)和开发依赖(devDependencies)区分

参考文章:https://mp.weixin.qq.com/s/cSHCKRdMPLKyPP_pOH3nkgcss

之前一直对package.json中的dependencies和devDependencies抱有疑问,为何依赖还要分为运行时(前者)和开发依赖(后者)呢?并且在安装一个依赖时,如何判断是应该放在dependencies仍是devDependencies呢?node

文章中说npm的依赖共分为如下五类(见npm官方文档https://docs.npmjs.com/files/package.json#dependencies):webpack

  • dependencies
  • devDependencies
  • peerDependencies
  • bundledDependencies
  • optionalDependencies

1、dependencies

这是npm最基本的依赖,写在一个简单的对象中,将依赖程序包映射到版本范围。比较经常使用,命令为web

npm install/i xxx@version -S/--save

若是不指定版本号version,则默认安装最新版本。typescript

2、devDependencies

顾名思义devDenpendencies是开发依赖,也就是开发中所使用的的依赖,线上生产环境上并不须要他们。命令为npm

npm install/i xxx -D/--save-dev

npm官方文档将它定义为开发中所使用的外部的测试或者文档框架。json

 文章中提到,开发依赖的目的是为了减小在安装依赖时node_modules的体积,提高安装依赖的速度,节省线上及其的硬盘资源以及部署上线的时间。那么那些依赖能够划分为开发依赖呢?sass

一、构建工具

点名webpack、webpack-cli、rollup(其实我没用过)等等。构建工具是为了生成生产环境的代码,在线上使用的代码实际上是他们工做的结果,也就是说在线上时,并不须要他们,所以他们能够归为开发依赖。babel

固然他们衍生出来的插件,如xxx-webpack-plugin,也属于开发依赖。框架

二、预处理器

指的是对源代码进行必定的处理并生成最终代码的工具。常见的有css中的less、scss、sass、stylus,js中的typescript、coffee-script、babel等等。

以 babel 为例,经常使用的有两种使用方式。其一是内嵌在 webpack 或者 rollup 等构件工具中,通常以 loader 或者 plugin 的形式出现,例如 babel-loader。其二是单独使用(小项目较多),例如 babel-cli。babel 还额外有本身的插件体系,例如 xxx-babel-plugin。相似地,less 也有与之对应的 less-loader 和 lessc。这些都算做开发依赖。

在 babel 中还有一个注意点,那就是 babel-runtime 是 dependencies 而不是 devDependencies。

三、测试工具

固然在线上时是用不到测试工具的,所以他们纳入开发依赖。经常使用如chai、e2e等等。

四、其余

最后一类很难归纳,是开发时须要使用的,实际上显示要么是已经打包成最终代码了,要么是不须要了。好比 webpack-dev-server 支持开发热加载,线上是不用的;babel-register 由于性能缘由也不能用在线上。其余还可能和具体业务相关。

3、peerDependencies、bundleDependencies、optionalDependencies

做为npm包的使用者,前两项其实已经足够平常使用了,后三项是做为npm包的发布者须要考虑使用的,在此不作过多赘述,若是有兴趣能够查阅原文章以及npm的文档。

相关文章
相关标签/搜索