性能优化——提高webpack打包速度

1. 将第三方包使用外链的方式加载

步骤1: 把需要使用外链的包定义为一个对象

const link = {
  externals: {
    "monaco-editor": "monaco",
    "monaco-editor/esm/vs/editor/editor.api": "monaco", //把react-monaco,
    'clsx': 'clsx',
    'axios': 'axios',
    "react": "React",
    "react-dom": "ReactDOM",
    "react-dom/server": "ReactDOMServer",
    "react-router-dom": "ReactRouterDOM",
    'vue': "Vue",
    'vue-router': "VueRouter",
    'vuex': "Vuex",
    'jquery': "jQuery",
    'jszip': 'JSZip',
    'element-ui': 'ELEMENT',
    'qiankun':'qiankun'
  },
  css: [
  ],
  js: [
    '/vendor.js'
  ]
}

注: vendor.js用于存放需要外链的js , 放在了public目录下, 会引入到index.html中(看第4步)

2. 在configureWebpack中配置

 3. 在chainWebpack中在html模板中自定义一个link属性存放数据

 4. 加载link对象上的数据

2. 将体积大的库过滤成比较小的库

场景: 如下图, moment这个库体积较大, 实际只用了里面单独的几个api, 比较大材小用 (当然, 我们可以选择体积较小的dayjs库, 也可以自己封装格式化时间的api)

 如果你坚持使用了moment库, 那如何减少它的体积呢?

解决:  在vue.config.js中使用webpack中的ContextReplacementPlugin,来筛选新上下文的资源

 解析ContextReplacementPlugin:

ContextReplacementPlugin: 允许你覆盖查找规则

用法: 

new webpack.ContextReplacementPlugin(
  resourceRegExp: RegExp,
  newContentResource?: string,
  newContentRecursive?: boolean,
  newContentRegExp?: RegExp
)

如果资源(或目录)符合 resourceRegExp 正则表达式,插件会替换默认资源为 newContentResource,布尔值 newContentRecursive 表明是否使用递归查找,newContextRegExp 用于筛选新上下文里的资源。如果 newContentResource 为相对路径,会相对于前一匹配资源路径去解析。

就以限制moment中的模块为例子, 限定查找 moment/locale 上下文里符合 /zh\-mo/ 表达式的文件,因此也只会打包这几种本地化内容

new (require("webpack").ContextReplacementPlugin)(
          /moment[/\\]locale$/,
          /zh\-mo/
        ),

更多详情请参考: https://cloud.tencent.com/developer/section/1477555

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值