Webpack 编号的块未根据配置正确加载
Webpack numbered chunks not loading correctly per config
所以我有两个不同的 webpack 配置,我正在传递一个看起来像这样的数组:
[
{
entry: entrypointsIE,
output: outputIE,
module: {
loaders: [
// set of loaders that has one difference to load SCSS variables from a different location
]
},
resolveLoader: resolveLoader,
resolve: resolve,
plugins: plugins,
devServer: devServer
},
{
entry: entrypoints,
output: output,
module: {
loaders: [
// loaders all the same as the IE9 except one difference in sass loader
]
},
resolveLoader: resolveLoader,
resolve: resolve,
plugins: plugins,
devServer: devServer
}
]
output = {
path: '/web/dist',
filename: '[name].bundle.js',
chunkFilename: '[id].bundle.js'
};
outputIE = {
path: '/web/dist',
filename: '[name].ie.bundle.js',
chunkFilename: '[id].ie.bundle.js'
};
和
apps.forEach(function(appName, index) {
entrypoints[appName] = [ 'webpack/hot/dev-server', appName + '/app' ];
});
appsIE = apps;
appsIE.forEach(function(appName, index) {
entrypointsIE[appName] = [ 'webpack/hot/dev-server', appName + '/app.ie' ];
});
入口点是完全相同的文件(我认为这就是我的问题所在)。我的 index.html 中有一个条件,如果它检测到 IE,则加载 framework.ie.js
,如果没有,则加载 framework.js
。这按预期工作。问题是它不会一致地加载编号块。有时我看到 0.bundle.js
正在加载,有时我看到 0.bundle.ie.js
正在加载(无论 framework.ie.js
还是 framework.js
都已加载)。
有没有办法让它始终加载正确的块,或者有什么方法可以确保我需要的所有东西都被加载到框架包中,而没有任何块被 webpack 加载?
您是否尝试过使用条件注释根据浏览器供应商加载适当的脚本?
<!--[if IE]>
<script src="framework.ie.js"/>
<script src="0.bundle.ie.js"/>
<![endif]-->
<!--[if !IE]> -->
<script src="framework.js"/>
<script src="0.bundle.js"/>
<!-- <![endif]-->
找到解决方案。添加:
new webpack.optimize.LimitChunkCountPlugin({maxChunks: 1}
做到这一点,所以我的入口点块是唯一创建的块,因此逻辑正常工作。
所以我有两个不同的 webpack 配置,我正在传递一个看起来像这样的数组:
[
{
entry: entrypointsIE,
output: outputIE,
module: {
loaders: [
// set of loaders that has one difference to load SCSS variables from a different location
]
},
resolveLoader: resolveLoader,
resolve: resolve,
plugins: plugins,
devServer: devServer
},
{
entry: entrypoints,
output: output,
module: {
loaders: [
// loaders all the same as the IE9 except one difference in sass loader
]
},
resolveLoader: resolveLoader,
resolve: resolve,
plugins: plugins,
devServer: devServer
}
]
output = {
path: '/web/dist',
filename: '[name].bundle.js',
chunkFilename: '[id].bundle.js'
};
outputIE = {
path: '/web/dist',
filename: '[name].ie.bundle.js',
chunkFilename: '[id].ie.bundle.js'
};
和
apps.forEach(function(appName, index) {
entrypoints[appName] = [ 'webpack/hot/dev-server', appName + '/app' ];
});
appsIE = apps;
appsIE.forEach(function(appName, index) {
entrypointsIE[appName] = [ 'webpack/hot/dev-server', appName + '/app.ie' ];
});
入口点是完全相同的文件(我认为这就是我的问题所在)。我的 index.html 中有一个条件,如果它检测到 IE,则加载 framework.ie.js
,如果没有,则加载 framework.js
。这按预期工作。问题是它不会一致地加载编号块。有时我看到 0.bundle.js
正在加载,有时我看到 0.bundle.ie.js
正在加载(无论 framework.ie.js
还是 framework.js
都已加载)。
有没有办法让它始终加载正确的块,或者有什么方法可以确保我需要的所有东西都被加载到框架包中,而没有任何块被 webpack 加载?
您是否尝试过使用条件注释根据浏览器供应商加载适当的脚本?
<!--[if IE]>
<script src="framework.ie.js"/>
<script src="0.bundle.ie.js"/>
<![endif]-->
<!--[if !IE]> -->
<script src="framework.js"/>
<script src="0.bundle.js"/>
<!-- <![endif]-->
找到解决方案。添加:
new webpack.optimize.LimitChunkCountPlugin({maxChunks: 1}
做到这一点,所以我的入口点块是唯一创建的块,因此逻辑正常工作。