我编写了一个目前在 Node 应用程序中工作的小型解析器,但想知道是否有一种方法可以制作一个既可以在 NodeJS 应用程序中也可以在使用 requirejs 的客户端应用程序中工作的模块?
路径/to/lib/index.js
function someRandom(strings) {
// we are doing something here
return strings
}
exports.someRandom = someRandom;
现在我在客户端得到这个
Uncaught ReferenceError: exports is not defined
我知道我可以使用 Node requirejs
,然后更改结构以使用define
,但是有没有其他方法而不添加 Node requirejs
?
这是我的 js/main.js
文件
require(["path/to/lib/index"], function(something) {
// will do something here
});
最佳答案
我更喜欢的方式是用 AMD 语法编写所有模块(使用 define
)并使用 amd-loader
将它们加载到 Node.js 中。请注意,尽管使用了 AMD 语法,但该解决方案并未使用 RequireJS。
但是,有一种方法可以做到这一点,而无需使用 AMD 语法。您可以使用 r.js 来包装 Node 模块。例如,如果您将 Node 模块树放入 in
中,您可以执行以下操作:
$ r.js -convert in out
这将在 out
中创建一个与 in
中的文件相对应的文件树,但用 define
调用包装。然后您可以使用 RequireJS 在浏览器中加载它们。有限制。有些是显而易见的,例如无法使用依赖于 Node 运行时的 Node 模块(例如 fs
、child_process
等)。有些更微妙,例如您不能使用 require(foo)
,其中 foo
是一个变量(RequireJS 将只处理那里的字符串文字)。请参阅documentation了解详情。
关于node.js - 编写一个在nodejs和requirejs中都可以工作的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418146/