我以前有这样的文件夹结构:
[development]
--[app]
----[dist]
------[js]
--------app.js
--------contact-support.0.js
----[src]
--[node_modules]
--package.json
--webpack.config.js
--index.php
[tools]
但将与webpack相关的所有内容从根目录移至tools/webpack
:
[development]
--[app]
----[dist]
------[js]
--------app.js
--------contact-support.0.js
----[src]
--index.php
[tools]
--[webpack]
----[node_modules]
----package.json
----webpack.config.js
所以我现在从tools/webpack
运行webpack,webpack.config.js
中的大多数路径都以./../../development
开头。
除了那些dang chunk(由require.ensure()
创建)之外,一切都有效。
我在webpack编译中没有错误,并且在Chrome控制台中没有错误,但是当我偶然发现动态加载块的部分代码时,我得到了:
Uncaught (in promise) TypeError: Cannot read property 'call' of undefined(…)
我知道它并没有多说,但根据我99%的经验,它必须与webpack的路径处理有关。
魔鬼隐藏在这里:
output: {
chunkFilename: './../../development' + '/app/dist/js/[name].[id].js',
publicPath: 'http://localhost/YDR/branches/refactoring/tools/webpack/'
},
问题是,当webpack生成块文件时,它在不同的目录(./tools/webpack/
)中完成,而不是当app尝试加载它时(./development/
),所以我不能使用相对路径并且需要小哈克在这里。
理论上这些路径是正确的:
:保存块文件的路径是我运行webpack(tools/webpack
与publicPath相同)的路径,但升级2级至http://localhost/YDR/branches/refactoring/development/app/dist/js/
加载:我从中加载块文件的路径是从publicPath + chunkFilename生成的,它也解析为http://localhost/YDR/branches/refactoring/development/app/dist/js/
然而,当我到达时它仍然会中断:
module.exports = (function () {
$('document').ready(function () {
$('body').on('click', '[data-target="#contactSupport"]', function () {
require.ensure([
'./../modules/contact-support/contact-support.js' // files that chunk will contain
], (require) => {
require('./../modules/contact-support/contact-support.js'); // BREAKS HERE
}, 'contact-support'); // name of chunk file
});
});
})();