【发布时间】:2017-05-07 10:20:21
【问题描述】:
这是我想要做的:
有一个SubApp,当使用 webpack 构建时,它会创建一个 vendor.js 和 app.js 包。以这种方式构建的应用程序已经可以工作。有一个MainApp,它动态加载SubApp 的供应商和应用程序包。这不起作用。
加载捆绑包时,我收到以下错误:
Cannot read property 'call' of undefined
我正在使用的所有代码代码:
SubApp webpack 配置:
{
context: path.resolve(__dirname, './src'),
entry: {
app: './app.js',
},
output: {
path: path.resolve(__dirname, './dist'),
filename: '[name].js',
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks(module) {
return module.context && module.context.indexOf('node_modules') >= 0;
},
}),
],
};
SubAppapp.js:
import angular from 'angular';
angular.module('barApp', [])
.component('foobar', {
template: `BAR APP`,
});
MainApp webpack 配置:
{
context: path.resolve(__dirname, './src'),
entry: {
app: './nav.js',
},
output: {
path: path.resolve(__dirname, './dist'),
filename: '[name].js',
},
module: {
rules: [
{
test: /\.html$/,
use: [{ loader: 'html-loader' }],
},
],
},
devServer: {
contentBase: path.resolve(__dirname, './src'),
},
};
MainAppapp.js:
Promise.all([
import('./SubApp/dist/vendor.js'),
import('./SubApp/dist/app.js'),
]).then(([ vendor, app ]) => {
console.log('Success');
}).catch(err => {
console.log("Chunk loading failed", err);
});
运行MainApp(无论是从开发服务器还是构建文件)将产生:Chunk loading failed TypeError: Cannot read property 'call' of undefined。
我正在使用 webpack 2.5.0。
编辑:经过一番调查,如果我按顺序加载供应商和应用程序,看起来我可以使当前的设置工作,但是这样做会显着减慢加载速度,因为我需要等待大(供应商)捆绑包首先加载,然后再获取实际应用。
AFAIK,动态加载的模块仍应按照请求的顺序执行,而不是按照请求首先完成的顺序。
我可以将SubApp 打包为library,但如果我想拥有单独的供应商和应用程序包,我不清楚该怎么做。
【问题讨论】: