我试图将服务从nodejs迁移到ringojs。我使用require()
时遇到了问题。例如
考虑一下:
var restify = require('restify');
RingoJS找不到restify模块,因为它不知道要看
在node_modules
目录中。我可以将node_modules
添加到RingoJS使用的路径中
(我也这样做了),但在解决召唤require()
时,这并没有帮助,
因为模块嵌套在目录树中。
有没有办法让RingoJS在node_modules目录中查找所需的模块?
答案 0 :(得分:0)
您可以使用-m
选项向Ringo的模块搜索路径添加其他目录。示例:使用underscore
通过npm安装npm install 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;
}));
您的具体问题似乎是,解析仅与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不同,Node.js必须以非阻塞方式进行开发,并且所有内容都经过优化,以便使用事件驱动模型顺利运行。