2016-12-12 3 views
0

Я стараюсь понять, как работает 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 не работает?

ответ

0

Я не уверен на 100%, но если вы посмотрите на docs, вы обнаружите, что вам не нужно получать функцию require в качестве параметра обратного вызова.

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

Таким образом, вы, вероятно, получать ничего «REQ» - вот почему он не определен - и вы должны использовать «требовать», потому что, ну, это функция вам нужно позвонить.

+0

Итак, в # 1 этот аргумент игнорируется, поскольку приоритет имеет другой 'require'. Но это неправда, что 'req' в # 2 пуст. Оба 'require (s)' являются одними и теми же функциями, только один из них в # 2, вероятно, привязан к отдельному контексту, потому что он выдает ошибку в модулях [moduleId]. И мне было бы интересно узнать, почему, потому что я получаю ту же самую ошибку в # 1, когда я обслуживаю свой JS 'webpack-dev-server' - есть что-то теневое с этим' require'. –

+0

Может быть, это как-то связано со статическим анализом? Извините, я не мог помочь ... =/ –

+0

Вы используете babel? В github есть проблема (https://github.com/webpack/webpack/issues/1685), где некоторые люди решили это, используя модуль babel-plugin-add-module-export (https://www.npmjs.com/package/babel-plugin-add-module-exports) –

 Смежные вопросы

  • Нет связанных вопросов^_^