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