gpt4 book ai didi

javascript - 如何将 Webpack 4 SplitChunksPlugin 与 HtmlWebpackPlugin 结合使用用于多页面应用程序?

转载 作者:行者123 更新时间:2023-12-02 23:17:22 25 4
gpt4 key购买 nike

我正在尝试利用 SplitChunksPlugin 为 MPA 中的每个页面/模板生成单独的包。当我使用 HtmlWebpackPlugin 时,我会为每个页面获取一个 html 文件,其中包含指向正确包的脚本标记。太棒了!然而,我遇到的问题是我的 vendor 文件。我希望单独的 html 文件仅指向他们需要的 vendor 包。当 SplitChunksPlugin 创建多个 vendor 包时,我无法让每个单独的 html 文件指向正确的 vendor 包。生成的 bundle 是:

home.bundle.js
product.bundle.js
cart.bundle.js
vendors~cart~home~product.bundle.js
vendors~cart~product.bundle.js

所以基本上主页模板应该引用 home.bundle.js、vendors~cart~home~product.bundle.js,而不是第二个 vendor 包。只有购物车和产品模板应引用两个 vendor bundle 。我正在利用 HtmlWebpackPlugin 的 chunks 选项,但无法让它提取正确的 vendor 包,除非我明确引用它的名称,如下所示:

chunks: ['vendors~cart~home~product.bundle','home']

但这有点违背了动态渲染脚本标签的目的。我尝试创建一个 vendor 入口点,但这将我的所有 vendor 集中在一起。我缺少一些简单的配置吗?

我的 webpack.config.js:

const path = require('path');
const webpack = require('webpack');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const Visualizer = require('webpack-visualizer-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
mode: 'development',
devtool: 'cheap-module-eval-source-map',
entry: {
home: './src/js/page-types/home.js',
product: './src/js/page-types/product.js',
cart: './src/js/page-types/cart.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist/js')
},
optimization: {
splitChunks: {
chunks: 'all'
}
},
plugins: [
new CleanWebpackPlugin(['dist']),
new Visualizer(),
new HtmlWebpackPlugin({
filename: 'home.html',
chunks: ['vendors','home']
}),
new HtmlWebpackPlugin({
filename: 'product.html',
chunks: ['vendors','product']
}),
new HtmlWebpackPlugin({
filename: 'cart.html',
chunks: ['vendors~cart~product','cart']
}),
], ...

我的js模块:

/* home.js */
import jQuery from 'jquery';
import 'bootstrap';

购物车和产品也引用了react库:

/* cart.js */
import jQuery from 'jquery';
import 'bootstrap';
import React from 'react';
import ReactDOM from 'react-dom';

 

/* product.js */
import jQuery from 'jquery';
import 'bootstrap';
import React from 'react';
import ReactDOM from 'react-dom';

示例 html 输出 home.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Webpack App</title>
</head>
<body>
<script type="text/javascript" src="home.bundle.js"></script></body>
</html>

最佳答案

使用 html-webpack-plugin 的 version4(现在处于测试版),并且只在 chunks 选项中包含入口 chunk。

npm i -D html-webpack-plugin@next

module.exports = {
new HtmlWebpackPlugin({
filename: 'home.html',
chunks: ['home']
}),
new HtmlWebpackPlugin({
filename: 'product.html',
chunks: ['product']
}),
new HtmlWebpackPlugin({
filename: 'cart.html',
chunks: ['cart']
}),
};

这将自动包含相关 block 。

关于javascript - 如何将 Webpack 4 SplitChunksPlugin 与 HtmlWebpackPlugin 结合使用用于多页面应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50803260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com