前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webpack 优化(1)

webpack 优化(1)

作者头像
零式的天空
发布2022-03-25 14:56:49
2570
发布2022-03-25 14:56:49
举报
文章被收录于专栏:零域Blog

webpack 优化

前一段时间一直在写后台管理系统(vue + elementUI + webpack),数下来,虽然不多,也有 3 个了;由于是单页应用,每次到发布的时候,都会耗费大量的时间对代码进行编译压缩,所以时不时都会思考着如何才能优化这个过程;谷歌和度娘就像是哆啦 A 梦的奇幻袋,总能给大家带来意想不到的惊喜,当然,这次也不例外。

happypack

npm的官方解释比较简单:通过并行转换文件以使 webpack 的构建速度更快;说白了就是利用多线程的优势。

它提供了一个插件和一个加载器,两个并用才能启用 happypack。

迫不及待了已经,赶紧上代码了 →_→

引入

require('os')模块想必大家都不陌生了,通过os.cpus().length,获得线程的长度,供 happypack 使用。

代码语言:javascript
复制
const HappyPack = require('happypack');
const os = require('os');
// 启动线程池
const HappyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });

插件+加载器

一个静态对象代表一个加载器入口,每个对象里面有重要的三个字段,id表示唯一标识,threadPool表示 happypack 开启的线程数量,loaders表示真正需要加载的加载器。

代码语言:javascript
复制
module.exports = {
  plugins: [
    new HappyPack({
      id: 'jsx',
      threadPool: HappyThreadPool,
      loaders: ['babel-loader', path.join(__dirname, 'loader/debug-loader')]
    })
  ]
};

咦???大家是不是发现了什么 → 有点陌生的debug-loader加载器,话说起来,这个是涛哥提供的 idea。

引申一下,由于 mock 数据到后期异常庞大(夸张一下),被打包进生产环境的 mock 数据被涛哥无情的揪了出来,真挚的摆在我的面前,尘世间最痛苦的事情是我没有能力失去它(mock 数据),如果上天再给我一次机会的话,我会说:我终于知道用debug-loader了。

涛哥建议我参考公司内部的配置工具,在生产环境中,针对特定的引入参数,对引入文件进行剔除。

迫不及待了,上代码啊啊啊啊啊啊啊~

代码简简单单,source入参代表文件内容,resourceQueryimport 'filepath?default'?后边的部分(包括?)。

我这里的判断逻辑是,带有?debug字样的引入文件,只有在非生产环境中的 mock 环境才被引入(有点拗口)。

代码语言:javascript
复制
'use strict';

module.exports = function(source) {
  const _this = this;
  const { resourceQuery } = _this;
  if (resourceQuery === '?debug') {
    const { NODE_ENV, mock } = process.env;
    return NODE_ENV !== 'production' && !!mock ? source : '';
  }
  return source;
};

使用方法

重点在于,loaders 字段中的值['happypack/loader?id=jsx'],其中,通过id=jsx进行 happypack 插件中的加载器替换。

代码语言:javascript
复制
module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        loaders: ['happypack/loader?id=jsx'],
        include: [
          resolve('src'),
          resolve('test'),
          resolve('node_modules/webpack-dev-server/client')
        ]
      }
    ]
  }
};

敬请期待下一节 webpack 优化(2) Dllplugin ^_^

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • webpack 优化
    • happypack
      • 引入
      • 插件+加载器
      • 使用方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档