Ich versuche zu verstehen, wie require.ensure()
tatsächlich funktioniert. Vor allem, warum müssen wir require
an den Rückruf von require.ensure()
übergeben?Was ist der Punkt des Bestehens erfordern Funktion zu erfordern.
1. Dies funktioniert:
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
Allerdings, wenn ich den Namen des require
-req
Parameter zu ändern,
2. Das funktioniert nicht:
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
wird ein Fehler ausgegeben:
Uncaught (in promise) TypeError: Cannot read property 'call' of undefined(…)
, die aus dieser Linie kommt:
// Execute the module function
modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
Warum Beispiel # 2 nicht funktioniert?
Also in # 1 wird dieses Argument ignoriert, weil die Priorität hat die andere 'require'. Aber es ist nicht wahr, dass 'req' in # 2 leer ist. Beide 'require (s)' sind die gleichen Funktionen, nur die in # 2 ist wahrscheinlich an einen separaten Kontext gebunden, weil sie einen Fehler bei den Modulen [moduleId] auslöst. Und ich würde gerne wissen, warum, weil ich genau den gleichen Fehler in # 1 bekomme, wenn ich meinen JS mit 'webpack-dev-server' betreue - da ist etwas zwielichtiges mit dem' require'. –
Vielleicht hat es etwas mit statischer Analyse zu tun? Entschuldigung, ich konnte nicht helfen ... =/ –
Benutzt du Babel? Es gibt eine Diskussion über github (https://github.com/webpack/webpack/issues/1685), wo einige Leute dies gelöst haben, indem sie den babel-plugin-add-module-exports (https://www.npmjs.com/package/babel-plugin-add-module-exports) –