从根目录

时间:2016-12-19 16:38:04

标签: javascript webpack webpack-2

我以前有这样的文件夹结构:

[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
        });
    });
})();

0 个答案:

没有答案