当前位置: 首页 > 知识库问答 >
问题:

javascript - webpack 异步引入的文件如何根据文件大小判断是否单独打包在一起?

伏建修
2024-02-21

我有一个组件库
index.ts 入口文件
a.jsx 组件
b.jsx
c.jsx
....

在入口文件中通过require.context('./', false, //.jsx$//, 'lazy') 方式异步引入文件, 这样每一个文件就分开打包,按需加载了。

但是现在存在文件就是 如果我有的组件很小只有1kb, 2kb,3kb这种小组件的我希望他能合并在一起,避免http请求过多? 我希望文件能合并到200kb左右一个, 又能异步加载,该如何解决?

共有1个答案

耿俊
2024-02-21

Webpack中,异步引入的文件默认情况下会根据模块的依赖关系和配置进行打包。如果你希望根据文件大小来决定是否将多个小文件合并在一起打包,你可以通过配置optimization.splitChunks选项来实现这个需求。

optimization.splitChunksWebpack 4中引入的一个特性,它允许你自定义代码分割的策略。你可以设置一个最小文件大小(minSize)和最大文件大小(maxSize),以及一个合并文件的阈值(maxAsyncRequests),来控制何时将多个小文件合并成一个chunk

以下是一个配置示例,展示了如何根据文件大小来合并chunk

module.exports = {  // ...  optimization: {    splitChunks: {      chunks: 'all',      minSize: 30000, // 设置最小文件大小为30KB      maxSize: 0, // 设置最大文件大小,0表示不限制      minChunks: 1, // 设置最小chunks数量,1表示每个chunk至少包含一个模块      maxAsyncRequests: 10, // 设置并发请求的最大数量      maxInitialRequests: 5, // 设置初始并发请求的最大数量      automaticNameDelimiter: '~', // 自动生成的chunk名称分隔符      name: true, // 自动生成chunk名称      cacheGroups: {        vendors: {          test: /[\\/]node_modules[\\/]/,          priority: -10, // 缓存组优先级          filename: 'vendors.js'        },        default: {          minChunks: 2,          priority: -20,          reuseExistingChunk: true, // 如果当前 chunk 包含已从主 bundle 中拆分出的模块,则它将被重用,而不是生成新的模块          filename: 'common.js'        }      }    }  }};

在这个配置中,minSize设置为30KB,这意味着如果一个chunk的大小小于30KBWebpack会尝试将其与其他chunk合并。maxSize设置为0,表示没有最大文件大小限制。maxAsyncRequestsmaxInitialRequests分别控制并发请求和初始请求的最大数量。

 类似资料:
  • 例如: 打包时候,vconsole总是被打包到chunk-vendors中,没有单独打成一个chunk,这么配置如何修改,才能实现异步加载vconsole?

  • 本文向大家介绍javascript判断文件是否存在实例代码,包括了javascript判断文件是否存在实例代码的使用技巧和注意事项,需要的朋友参考一下  javascript判断文件是否存在 1. 客户端 2. 服务器端  感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 本文向大家介绍webpack打包文件太大怎么办?相关面试题,主要包含被问及webpack打包文件太大怎么办?时的应答技巧和注意事项,需要的朋友参考一下 webpack把我们所有的文件都打包成一个JS文件,这样即使你是小项目,打包后的文件也 会非常大。可以从去除不必要的插件,提取第三方库,代码压缩,代码分割,设置缓存几个 方面着手优化。 详细参见:http://www.jianshu.com/p/a

  • 函数名称:判断文件(夹)是否存在 函数功能: 判断文件(夹)是否存在 函数方法 flag = file.isExist(path) 参数 类型 必填 说明 path string 是 需要判断的文件(夹)路径 返回值 类型 说明 flag boolean true - 文件(夹)存在,false - 文件(夹)不存在 函数用例 path = "/sdcard/LuaBox/Projects/" f

  • 问题内容: 我想用jQuery异步上传文件。 我只获取文件名,而不是上传文件。我该怎么做才能解决此问题? 问题答案: 使用HTML5,你可以使用Ajax和jQuery进行文件上传。不仅如此,你还可以执行文件验证(名称,大小和MIME类型)或使用HTML5进度标签(或div)处理进度事件。最近,我不得不制作一个文件上传器,但是我不想使用Flash,iframes或插件,经过一番研究后,我想到了解决方

  • 问题内容: JavaScript中是否有类似于CSS的东西,允许您在另一个JavaScript文件中包含一个JavaScript文件? 问题答案: JavaScript的旧版本没有导入,包含或要求,因此已经开发了许多解决此问题的方法。 但是自2015年(ES6)起,JavaScript有了ES6模块标准即可在Node.js中导入模块,大多数现代浏览器也支持该模块。 为了与旧浏览器的兼容性,这样的构