Node.js 编写一个同时在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

我写了一个小的解析器,目前可以在node应用程序中使用,但我想知道是否有一种方法可以使模块同时在NodeJS应用程序和使用requirejs的客户端应用程序中工作

path/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
)并在节点中加载它们。请注意,此解决方案不使用RequireJS,即使使用了AMD语法

然而,有一种方法可以做到这一点,而不必使用AMD语法。您可以使用
r.js
包装节点模块。例如,如果将节点模块树放在的
中,则可以执行以下操作:

$ r.js -convert in out

这将在
out
中创建一个文件树,该树对应于
in
中的文件,但用
define
调用包装。然后可以使用RequireJS在浏览器中加载这些。这是有局限性的。有些是显而易见的,比如不能使用依赖于节点运行时的节点模块(比如
fs
child\u进程
,等等)。有些更微妙,比如不能使用
require(foo)
,其中
foo
是一个变量(RequireJS在这里只处理字符串文本)。有关详细信息,请参见。

amd loader
我想我可以选择这一款:)谢谢!