为什么webpack未配置SplitChunksPlugin时lodash自动拆分到vendor包
原因说明
webpack 从 v4 版本开始已经内置了 SplitChunksPlugin,默认处于开启状态,不需要开发者手动配置引入,只要模块符合默认拆分规则就会被自动抽离为单独的 bundle 文件。
你引入的 lodash 完全命中了默认的代码拆分规则:
- 模块来自
node_modules目录 - 模块体积远大于默认的 30KB 拆分阈值
- 满足「初始页面加载并行请求数不超过3、按需加载并行请求数不超过5」的默认限制
因此会被自动抽离为独立的 vendor 包,也就是你看到的/js/vendors-node_modules_lodash_lodash_js.3715c9aa.js文件。
可选调整方式
如果不需要默认的拆分逻辑,你可以在 webpack 配置中新增 optimization.splitChunks 字段覆盖默认规则,示例如下:
const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { mode: "development", entry: './src/index.js', // 新增optimization配置覆盖默认规则 optimization: { splitChunks: { // 配置只拆分异步加载的模块,同步引入的第三方包不会被单独拆分 chunks: 'async' // 若要完全关闭自动拆分,可直接设置为 splitChunks: false } }, output: { filename: 'js/[name].[contenthash:8].js', path: path.resolve(__dirname, 'dist'), clean: true }, module: { rules: [ { test: /\.js$/i, use: ["babel-loader"], exclude: /node_modules/ }, ] }, plugins: [ new HtmlWebpackPlugin({ template: "index.html" }) ], devServer: { contentBase: path.join(__dirname, 'dist'), compress: true, port: 9000, host: "localhost", open: true, historyApiFallback: true, } };
内容的提问来源于stack exchange,提问作者gwl002
相关产品推荐
相关产品推荐

