美文网首页前端微信小程序
【前端】前端开发时依赖(devDependencies)和运行时

【前端】前端开发时依赖(devDependencies)和运行时

作者: itlu | 来源:发表于2020-11-19 09:54 被阅读0次

    参考文章:参考文章

    01

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

    开发时依赖和运行时依赖

    文章中说npm的依赖共分为以下五类(见npm官方文档npm五种依赖类型):

    • dependencies

    • devDependencies

    • peerDependencies

    • bundledDependencies

    • optionalDependencies

    1. dependencies

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

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

    如果不指定版本号version,则默认安装最新版本。

    2. devDependencies

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

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

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

    开发时依赖

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

    3. 开发依赖

    3.1 构建工具

    点名webpackwebpack-clirollup(其实我没用过)等等。构建工具是为了生成生产环境的代码,在线上使用的代码其实是他们工作的结果,也就是说在线上时,并不需要他们,因此他们可以归为开发依赖。

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

    3.2 预处理器

    指的是对源代码进行一定的处理并生成最终代码的工具。常见的有css中的lessscsssassstylusjs中的typescriptcoffee-scriptbabel等等。

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

    babel中还有一个注意点,那就是 babel-runtimedependencies 而不是 devDependencies

    3.3 测试工具

    当然在线上时是用不到测试工具的,因此他们归入开发依赖。常用如chai、e2e等等。

    3.4 其他

    最后一类很难概括,是开发时需要使用的,实际上显示要么是已经打包成最终代码了,要么是不需要了。比如webpack-dev-server支持开发热加载,线上是不用的;babel-register因为性能原因也不能用在线上。其他还可能和具体业务相关。

    4. peerDependencies、bundleDependencies、optionalDependencies

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

    相关文章

      网友评论

        本文标题:【前端】前端开发时依赖(devDependencies)和运行时

        本文链接:https://www.haomeiwen.com/subject/jsjkiktx.html