You need to enable JavaScript to run this app. 为什么webpack未配置SplitChunksPlugin时lodash自动拆分到vendor包
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 02:06:03