让RingoJS在node_modules目录中查找所需的模块

时间:2016-06-27 14:20:24

标签: javascript node.js ringojs

我试图将服务从nodejs迁移到ringojs。我使用require()时遇到了问题。例如 考虑一下:

var restify = require('restify');

RingoJS找不到restify模块,因为它不知道要看 在node_modules目录中。我可以将node_modules添加到RingoJS使用的路径中 (我也这样做了),但在解决召唤require()时,这并没有帮助, 因为模块嵌套在目录树中。

有没有办法让RingoJS在node_modules目录中查找所需的模块?

1 个答案:

答案 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必须以非阻塞方式进行开发,并且所有内容都经过优化,以便使用事件驱动模型顺利运行。