Node.js 编写一个同时在nodejs和requirejs中工作的模块
我写了一个小的解析器,目前可以在node应用程序中使用,但我想知道是否有一种方法可以使模块同时在NodeJS应用程序和使用requirejs的客户端应用程序中工作Node.js 编写一个同时在nodejs和requirejs中工作的模块,node.js,requirejs,Node.js,Requirejs,我写了一个小的解析器,目前可以在node应用程序中使用,但我想知道是否有一种方法可以使模块同时在NodeJS应用程序和使用requirejs的客户端应用程序中工作 path/to/lib/index.js function someRandom(strings) { // we are doing something here return strings } exports.someRandom = someRandom; 现在我在客户端得到这个 Uncaught Referenc
path/to/lib/index.js
function someRandom(strings) {
// we are doing something here
return strings
}
exports.someRandom = someRandom;
现在我在客户端得到这个
Uncaught ReferenceError: exports is not defined
我知道我可以使用noderequirejs
,然后将结构更改为使用define
,但是有没有其他方法不添加noderequirejs
这是我的js/main.js
文件
require(["path/to/lib/index"], function(something) {
// will do something here
});
我更喜欢这样做的方式是用AMD语法编写所有模块(使用
define
)并在节点中加载它们。请注意,此解决方案不使用RequireJS,即使使用了AMD语法
然而,有一种方法可以做到这一点,而不必使用AMD语法。您可以使用r.js
包装节点模块。例如,如果将节点模块树放在的中,则可以执行以下操作:
$ r.js -convert in out
这将在out
中创建一个文件树,该树对应于in
中的文件,但用define
调用包装。然后可以使用RequireJS在浏览器中加载这些。这是有局限性的。有些是显而易见的,比如不能使用依赖于节点运行时的节点模块(比如fs
,child\u进程
,等等)。有些更微妙,比如不能使用require(foo)
,其中foo
是一个变量(RequireJS在这里只处理字符串文本)。有关详细信息,请参见。amd loader
我想我可以选择这一款:)谢谢!