Может ли браузер разрешать вызовы в методах

У меня есть

Пакет с системой плагинов. Каждый плагин представляет собой пакет. Можно загрузить плагин, вызвав метод use и передав экспорт плагинов в качестве аргумента:

package = require('thePackage').use( require('thePlugin'), require('anotherPlugin'));

я хочу

Если аргумент use является строкой, use должен требовать модуль.

package = require('thePackage').use('thePlugin','anotherPlugin')

вопрос

Может ли браузер разрешить это использование require?

Я не уверен, что браузер просто ищет reqire вызовов на верхнем уровне или действительно обрабатывает код.


person Oliver A.    schedule 28.05.2013    source источник


Ответы (1)


Browserify обрабатывает только вызовы require() с литералами, т.е. require('theplugin'); Он не будет включать модули, которые могут потребоваться для чего-то вроде:

function use(moduleName) {
    require(moduleName);
}
use("someModule");

Вы можете увидеть это в коде, просмотрев module-deps (это модуль для сканирования модулей), который вызывает node-detective, который по умолчанию возвращает только литералы (строки) для вызовов require().

Вы по-прежнему можете достичь того, чего хотите, и использовать require() с параметрами внутри ваших функций для плагинов, но тогда вам придется более явно указать, что вы включаете в свой браузерный пакет. Browserify не будет проходить через эти модули плагинов, если не увидит буквальное требование, поэтому вам нужно --require вручную. например browserify --require ./src/plugins/plugin.js

Разрешение загрузки модуля (то есть аргумент для require()) может не работать одинаково в node.js и в браузерной среде, поэтому будьте осторожны, если вы делаете какое-то умное разрешение имени модуля в своей функции use().

person Amitay Dobo    schedule 02.06.2013