浏览器可以解决方法中的调用问题

时间:2013-05-28 00:53:48

标签: browserify

我有

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

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

我想要

如果use的参数是字符串use,则需要该模块。

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

问题

浏览器可以解决require的使用情况吗?

我不确定浏览器是否仅在顶级列表中查找reqire次调用,或者是否真的让代码得到了回复。

1 个答案:

答案 0 :(得分:3)

Browserify进程只需要用文字调用require(),即require('theplugin'); 它将包含以下内容所需的模块:

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

您可以在代码中看到它,方法是查看调用node-detective的module-deps(用于扫描模块的模块),其中by default returns only literals(字符串)用于require()调用。

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

模块加载解析(即require()的参数)在node.js和浏览器化环境下可能无法正常工作,因此如果你在use()函数中做了一些聪明的模块名称解析,请小心。 / p>