2016-12-12 6 views
0

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?

Antwort

0

Ich bin nicht 100% sicher, aber wenn Sie sich die docs ansehen, werden Sie feststellen, dass Sie die Funktion require nicht als Callback-Parameter benötigen.

require.ensure(["module-a", "module-b"], function(/* this should be empty */) { 
    var a = require("module-a"); 
    // ... 
}); 

Also, sind Sie wahrscheinlich empfangen nichts in „req“ - das ist, warum es nicht definiert ist - und Sie sollten „erfordern“, weil gut verwenden, das ist die Funktion, die Sie anrufen müssen.

+0

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'. –

+0

Vielleicht hat es etwas mit statischer Analyse zu tun? Entschuldigung, ich konnte nicht helfen ... =/ –

+0

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) –