博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工程优化暨babel升级小记
阅读量:6452 次
发布时间:2019-06-23

本文共 1910 字,大约阅读时间需要 6 分钟。

小记背景

随着业务代码的增多,项目代码的编译时长也在增多,遂针对这个痛点在dev下做些优化

第一部分:优化dev编译时间

这里优化的主要思路是在dev环境下,单独出来一个dll配置文件,将项目中的部分依赖包写入配置文件,最终生成一个在dev环境下专用的dll文件,这样处理的目的是减少开发时的编译时间(ps:经测试可以提升50%左右的编译效率),具体修改如下:

  • 独立dev的dll配置

拷贝一份当前的dll.config.js文件,并重命名为开发环境专用dll-dev.config.js,并进行如下修改:

// dll-dev.config.jsmodule.exports = {  entry: {    vendor: [      'moment',      'nprogress',      'cookie_js',      'echarts',      'jsbarcode',      'lodash',      'lodash-decorators',      'isomorphic-fetch',      'antd',      'react',      'react-dom',      'react-router',      'react-router-redux',      'redux',      'redux-fetch-elegant',      'redux-logger',      'redux-thunk'      ...    ]  }}
  • 修改开发环境配置文件webpack.dev.config.js

  • 增加一条package.json命令,用于单独生成dev环境下的dll文件
"scripts": {  "dll-dev": "./node_modules/.bin/webpack --config dll-dev.config.js",}

dev环境下执行这条新的命令行生成dll文件以及对应的json映射文件,以便省去dev下一些import进来的包文件编译,从而减少工程的整体编译时长

npm run dll-dev

第二部分:工程升级到babel@7+

升级package依赖包 & 去除冗余

and

这里删除了'babel-preset-stage-2',因为为了避免概念模糊不清以及防止出现由于提案的删除或变更而导致不可预见问题,故而babel@7+中删除了阶段预设。

其他依赖包从v@6+升级到v@7+,并采用babel@7+中的最新官方包名称。

用于antd按需加载的babel-plugin-import也需要跟着babel进行升级到1.11.0,因为配置语法和资源的目录名称都改变了(详见babel.config.js)。

修改babel配置文件

在babel@7+中,增加了一个新的配置文件babel.config.js,这样可以让配置文件变得更加灵活,更适合babel所采用的monorepo管理,比如可以将配置集中在所有包中、也可以为每一个包单独创建配置,我们这里采用这个配置文件,因为需要在config里写一些判断逻辑,以实现dev和pro的更深层次隔离

ps:详细的配置官方说明详见

新的babel配置文件如下:

// babel.config.jsmodule.exports = function (api) {  api.cache(true)  const presets = [    '@babel/preset-env',    '@babel/react'  ]  const plugins = [    ['@babel/plugin-transform-runtime', {      'helpers': false,      'regenerator': true    }],    ['@babel/plugin-proposal-class-properties', { 'loose': true }],    ['import', {      'libraryName': 'antd',      'libraryDirectory': 'lib',      'style': 'css'    }, 'ant']  ]  return {    presets,    plugins  }}

编译测试对比

使用同一台电脑及开发环境进行测试比较

升级前执行编译耗时如下:

升级后执行编译耗时如下:

升级前进行修改保存耗时如下:

升级后进行修改保存耗时如下:

转载地址:http://wogwo.baihongyu.com/

你可能感兴趣的文章
oracle top pid,Linux Top 命令解析 比较详细
查看>>
grub如何进入linux系统,Linux操作系统启动管理器-GRUB
查看>>
linux pbs 用户时间,【Linux】单计算机安装PBS系统(Torque)与运维
查看>>
linux系统可用内存减少,在Linux中检查可用内存的5种方法
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>
linux mariadb忘记密码,Linux上mariadb重置密码
查看>>
如何在linux系统下配置共享文件夹,如何在windows和Linux系统之间共享文件夹.doc
查看>>
thinkpad装linux无线网卡驱动,ThinkPad E530 Fedora 20 下无线网卡驱动的安装
查看>>
linux磁盘管理是什么东西,Linux磁盘管理详解
查看>>
linux卸载软件出现依赖,关于ubuntu循环依赖软件的删除
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
linux屏幕复制显示出来的,linux – stdout到gnu屏幕复制缓冲区
查看>>
c语言规定数据长度,C语言中各种数据类型长度
查看>>
android l 新功能,Android L SDK -- 一些有趣的新功能
查看>>
android中心打开式动画,android 围绕中心旋转动画
查看>>
android 键盘 光标位置不对,鼠标定位不准的解决方法大全
查看>>
android pokemon go 虚拟定位,《Pokemon GO》推出全新道具 每年可转一次队伍
查看>>
控件拉伸(转)
查看>>
Linux -进程-孤儿进程-僵尸进程-预防僵尸进程
查看>>