2015-06-09 2 views
0

У меня есть изоморфный JavaScript. Я использую RequireJS на стороне клиента.Изоморфный JavaScript с RequireJS

(function() { 
    'use strict'; 

    function wrapper(require) { 
     var MyDep = require('my-dependency'); 

     return function MyExportedFunction() { 
      // ... 
     }; 
    } 

    if ((typeof exports === 'object') && module) { 
     module.exports = wrapper(require); // CommonJS 
    } else if ((typeof define === 'function') && define.amd) { 
     define(function(require) { 
      /** 
      * I need to `require` dependencies 
      * in here for them to be available inside 
      * the wrapper function :(
      */ 
      require('my-dependency'); 
      return wrapper(require); 
     }); // AMD 
    } 
}()); 

Есть ли способ, чтобы обойти того, чтобы разместить require Постулатов, расположенных непосредственно перед wrapper вызовом функции?

Если я опускаю этот оператор require, RequireJS жалуется, что зависимость еще не загружена для контекста.

Я предполагаю, что это непреодолимое ограничение способности RequireJS анализировать и идентифицировать требуемые зависимости раньше времени.

ответ

2

Да, RequireJS может обрабатывать форму CommonJS require только в том случае, если она присутствует непосредственно в заводской функции, переданной в define. Если он появляется в функциях, вызванных из заводской функции, но которые определены вне функции, то это не сработает. Внутри RequireJS запускает регулярное выражение на источнике заводской функции.

Это, как говорится, мне кажется, вы должны быть в состоянии заменить текущий вызов define с:

define(wrapper) 

Это будет вызывать wrapper со ссылкой на require функции RequireJS»и RequireJS должны быть способный анализировать источник wrapper для извлечения вызовов CommonJS.

+0

OK спасибо, попробую. – Ben

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