我正在尝试将一个服务从nodejs迁移到ringojs。我在使用require()时遇到了一个问题。例如,考虑以下内容:
var restify = require('restify');RingoJS找不到restify模块,因为它不知道要在node_modules目录中查找。我可以将node_modules添加到RingoJS使用的路径中(我也这样做了),但是当restify调用require()时,这并没有什么帮助,因为模块嵌套在目录树中。
有没有办法让RingoJS在node_modules目录中查找所需的模块?
发布于 2016-06-27 22:48:37
您可以使用-m选项将其他目录添加到Ringo的模块搜索路径中。示例:使用npm install underscore通过npm安装underscore,并使用ringo -m ./node_modules yourscript.js启动ringo。Undersocre将可用,并且可以如预期所需:
const _ = require("underscore");
// logs --> "3,6,9"
console.log(_.map([1, 2, 3], function(num) {
return num * 3;
}));你的具体问题似乎是restify只与Node.js兼容,而不是与其他类似CommonJS的平台兼容。它可能有一些与Ringo兼容的子模块,但到目前为止我还没有找到。Ringo的package.json与Node/npm的package.json不是1:1兼容的。如果restify在包描述符中使用了一些特定于Node的内容,Ringo将无法加载这些资源。
Ringo通过其各种标准化模块仍然非常接近CommonJS背后的想法,而Node很久以前就离开了这条道路。您可以在Node中找到CommonJS模块(使用require()加载模块),但没有找到CommonJS试图为服务器端JavaScript建立的其他API。
此外,Ringo不是围绕回调/事件驱动的非阻塞I/O构建的。您可以在Ringo上使用非阻塞I/O,但您也可以坚持使用阻塞I/O。这与Node.js不同,在Ringo中,您必须以非阻塞的方式进行开发,并且所有内容都经过优化,以便使用事件驱动模型顺利运行。
https://stackoverflow.com/questions/38056371
复制相似问题