webpack前端编译优化

放开公司其他单页应用的项目不说,在我们快速迭代的app中,内嵌了很多h5页面,这些页面在不同的业务线中,也没有任何联系,所以每个页面都是一个单独的入口, 时间长了,每个页面都难免引入一些公共的第三类库等等,所以随着页面越来越多,项目编译和打包都非常慢,即使更改了一个标点符号,都要等待7分钟的编译时间,7分钟什么概念,这么说吧我下楼买个饮料才5分钟。

418229ms≈7min

后来,分析了一下套路,大概因为我们的webpack版本过低吧,还是2开头的,现在早就更新到4了,也就是说别人都汽车了,我们还在骑自行车狂奔,所以第一步更新webpack,并且解决相关插件编译报错,第二部让webpack搭配HappyPack实现编译编译更加快速

1、更新webpack(yarn add webpack -s -d
2、英文webpack4使用了webpack-cli,所以需要安装webpack-cli(yarn add webpack-cli -s -d
这里可能有错误,因为后期运行项目的时候总是提示webpack-cli没有安装,因为后期运行了很多命令,不确定哪里是修改了哪里,所以建议全局安装一遍webpack和webpack-cli还有更新node版本
3、有错改错,安装了以上发现很多插件都不能用了,所以那个插件错了,就把那个插件重新装下。
4、几个印象比较深的错误

第一个

原因:webpack.optimize.CommonsChunkPlugin在webpack4里早已寿终正寝,取而代之的是optimization,所以这里要根据项目需求进行更改。

第二个

原因:这个错误找了很久,可以说是气到我摔电脑,github上也是人云亦云,最后在男神的帮助下,发现了webpack-md5-hash的问题,这个是一个hash缓存的插件,注释掉就好了,
https://github.com/erm0l0v/webpack-md5-hash/issues/5
这里都是说这个插件不好的地方,推荐看下可替代方案

小警告

还有一个这个警告,不影响编译,查了很久发现是因为html-webpack-plugin这个版本的问题,所以暂时不追究了。

还有一些问题不记得了,应该是比较好解决的

这些前期工作做好了以后,发现webpack4是可以正常跑起来了,编译时间也有了质的飞跃,从7分钟变为一分钟
35942ms≈1分钟

随后听说webpack4搭配HappyPack会编译的更快,于是安装happypack npm i -D happypack

然后:
const HappyPack = require('happypack');

{
      test: /\.js$/,
      loader: 'happypack/loader?id=happyBabel',
      exclude: /node_modules/,
      options: {
         presets: [
           'es2015', 'stage-0'
         ],
         plugins: ['transform-runtime']
       }
    }, 
  new HappyPack({
      // 用id来标识 happypack处理那里类文件
    id: 'happyBabel',
    // 如何处理  用法和loader 的配置一样
    loaders: [{
      loader: 'babel-loader'
    }],
    // 允许 HappyPack 输出日志
    verbose:true
  }),

其中会遇到一个错误

[AssertionError [ERR_ASSERTION]]:HappyPack: plugin for the loader '1' could not be found! Did you forget to add it to the plugin list?

最后查了一个github是然后更改了一个js的loader配置,去掉options就好了
image.png
{
      test: /\.js$/,
      loader: 'happypack/loader?id=happyBabel',
      exclude: /node_modules/
    }, 

这样再运行项目的时候就不会报错了。

到此为止再次运行项目的编译时间是
25836ms≈0.4分钟

20几秒是什么概念?也就是动动手指刷新一下浏览器的时间吧。到此,第一批工程算是完事了,其实还能更细节的去优化webpack,未完待续...

小ps:
刚开始的时候不知道怎么入手去优化,就安装了一个项目分析的插件webpack-bundle-analyzer,具体的安装和使用不赘述,可以看webpack打包体积优化,详细分布查看插件 webpack-bundle-analyzer,
就是每次我们运行项目的时候会出现一个本地服务器去分析哪些资源占用了比例比较大等

热图分析

后来发现这个对于一个SPA的项目会非常实用,哪个js占用的资源大了,就可以对其进行处理,对于我们的项目来说用处不大,仅供参考。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343