node.js - 编写一个在nodejs和requirejs中都可以工作的模块

标签 node.js requirejs

我编写了一个目前在 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 模块(例如 fschild_process 等)。有些更微妙,例如您不能使用 require(foo) ,其中 foo 是一个变量(RequireJS 将只处理那里的字符串文字)。请参阅documentation了解详情。

关于node.js - 编写一个在nodejs和requirejs中都可以工作的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418146/

相关文章:

node.js - 两个 Mongoose 模型中的循环依赖

javascript - RequireJS 对象中的私有(private)和公共(public)方法

node.js - Node redis,变量在客户端之间共享?

javascript - 通过 Express/Node.js 中的重定向将错误消息传递给模板

javascript - 我可以将任何 Javascript 函数转换为对象吗?

node.js - 如何使 Node child_process 连续执行

带有 ExpressJS 错误 : Cannot read property 'prototype' of undefined 的 Node.js

javascript - socket.io 客户端是否必须存在于全局范围内?

javascript - 使用 RequireJS 实现持久/可访问的 BackboneJS 模型

javascript - 重新加载快速中间件的正确方法是什么?