Я стараюсь понять, как работает require.ensure()
. В частности, почему нам нужно передать require
на обратный вызов require.ensure()
?Для чего нужна функция require.ensure?
1. Это работает:
module.exports = (function() {
require.ensure([
"./mod.js" // files that chunk will contain
], function(require) {
console.log(require("./mod.js")); // returns result of mod.js
}, 'mod'); // name of chunk file
Однако, если изменить имя параметра require
к req
,
2. Это не работает:
module.exports = (function() {
require.ensure([
"./mod.js" // files that chunk will contain
], function(req) {
console.log(req("./mod.js")); // should return result of mod.js, but doesn't
}, 'mod'); // name of chunk file
выдает ошибку:
Uncaught (in promise) TypeError: Cannot read property 'call' of undefined(…)
который исходит от этой линии:
// Execute the module function
modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
Почему пример # 2 не работает?
Итак, в # 1 этот аргумент игнорируется, поскольку приоритет имеет другой 'require'. Но это неправда, что 'req' в # 2 пуст. Оба 'require (s)' являются одними и теми же функциями, только один из них в # 2, вероятно, привязан к отдельному контексту, потому что он выдает ошибку в модулях [moduleId]. И мне было бы интересно узнать, почему, потому что я получаю ту же самую ошибку в # 1, когда я обслуживаю свой JS 'webpack-dev-server' - есть что-то теневое с этим' require'. –
Может быть, это как-то связано со статическим анализом? Извините, я не мог помочь ... =/ –
Вы используете babel? В github есть проблема (https://github.com/webpack/webpack/issues/1685), где некоторые люди решили это, используя модуль babel-plugin-add-module-export (https://www.npmjs.com/package/babel-plugin-add-module-exports) –