webpack-html-plugin不自动引用splitChunks提取的公共代码?

发布于 2022-09-07 23:51:58 字数 1978 浏览 10 评论 0

首先贴上项目结构,图片描述

webpack.base.config.js部分代码

// 配置常量
const SRC_PATH = path.resolve(__dirname, '../src');
const OUTPUT_PATH = path.resolve(__dirname, '../dist');
const PUBLIC_PATH = '/dist/';

// 获取html-webpack-plugin参数的方法
const getHtmlConfig = function(name){

return {
    template    : './views/' + name + '.html',
    filename    : name + '.html',
    title       : name,
    inject      : true,
    hash        : true,
    chunks      : [name,'common']
};

};

const config = {

context: SRC_PATH,
entry: {
    common : ['./pages/common/index.js'],
    index: ['./pages/index/index.js'],
    about: ['./pages/about/index.js'],
    user: ['./pages/user/index.js']
},
output: {
    path: OUTPUT_PATH,
    filename: 'js/[name].[chunkhash:6].js',
    publicPath: PUBLIC_PATH
},
resolve : {
  alias : {
      $src : path.resolve(__dirname,'../src')
  }
},
plugins: [
    new htmlWebpackPlugin(getHtmlConfig('index')),
    new htmlWebpackPlugin(getHtmlConfig('about')),
    new htmlWebpackPlugin(getHtmlConfig('user'))
]

}

webpack.prod.config.js 部分代码如下

const config = merge(baseConfig,{

mode : 'production',
optimization : {
    splitChunks : {
        cacheGroups : {
            commons : {
                name : 'vendor',
                minChunks : 2,
                chunks : 'all'
            }
        }
    }
}

})

在入口文件index、about和user中都引入了lodash,最后打包出来如图
图片描述
此时由于splitChunks将公共模块提取出来为vendor,但是打开最后打包生成的三个html文件(index,about,user)发现只引入了当时配的 chunks : [name,'common'] ,而vendor并没有自动引入,我觉得这里不应该把vendor写入到webpackHtmlPlugin的chunks项里面吧,因为假设我index引入了一个模块,我的user也引入了一个模块,但是我可能忘了或者并不清楚两个模块是相同的,但是splitChunks提取出来了,我也不可能所有的webpackHtmlPlugin的chunks项都引入,那就没意义了呀,请问被splitChunks提取的公共模块有没有办法自动引入呢?谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

总以为 2022-09-14 23:51:58

cacheGroups 中的每一个缓存块,其实都是一个chunk,你要在html中自动引入,就在htmlWebpackPlugin中把cacheGroups对应的键值加入到chunk数组里。在下面的chunk数组里添加‘commons’就可以了。注意后面那个s

return {
    template    : './views/' + name + '.html',
    filename    : name + '.html',
    title       : name,
    inject      : true,
    hash        : true,
    chunks      : [name,'common','commons']
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文