2

我有

带有插件系统的软件包。每个插件都是一个包 可以通过 all 方法加载插件use并将插件导出作为参数传递:

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

我想要

如果参数use是字符串use应该需要模块。

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

问题

browserify 可以解决这种用法require吗?

我不确定 browserify 是否只是reqire在顶级 levl 中查找调用,或者是否实际评估代码。

4

1 回答 1

3

Browserify 只处理带有字面量的 require() 调用,即 require('theplugin'); 它包括可能需要的模块,例如:

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

您可以通过查看调用 node-detective 的module-deps(这是用于扫描模块的模块)在代码中看到它,默认情况下,它仅返回用于 require() 调用的文字(字符串)。

你仍然可以实现你想要的,并在你的插件函数中使用带有参数的 require() ,但是你必须更明确地包含在你的浏览器包中的内容。如果 Browserify 看不到文字要求,它将不会遍历这些插件模块,因此您需要手动 --require 它们。例如browserify --require ./src/plugins/plugin.js

模块加载解析(即 require() 的参数)在 node.js 和浏览器化环境下可能不一样,所以如果你在 use() 函数中做一些聪明的模块名称解析,请小心。

于 2013-06-02T03:10:18.960 回答