Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在vert.x中运行node.js应用程序?_Javascript_Node.js_Vert.x - Fatal编程技术网

Javascript 如何在vert.x中运行node.js应用程序?

Javascript 如何在vert.x中运行node.js应用程序?,javascript,node.js,vert.x,Javascript,Node.js,Vert.x,我对vert.x完全陌生,我正在尝试看看是否有可能在vert.x中启动现有的nodejs应用程序。按照上的说明,我使用npm安装vert.x。我可以运行一个简单的hello world应用程序,但运行我们现有的应用程序有点挑战性。我找到的所有vert.x文档都在谈论编写新的应用程序,而不是移植现有代码 哦,同样的代码库需要继续在现有的nodejs系统上运行 我看到的问题是vert.x无法正确加载nodejs本机模块。例如,Vert.x因该要求而阻塞: var fs = require("fs")

我对vert.x完全陌生,我正在尝试看看是否有可能在vert.x中启动现有的nodejs应用程序。按照上的说明,我使用npm安装vert.x。我可以运行一个简单的hello world应用程序,但运行我们现有的应用程序有点挑战性。我找到的所有vert.x文档都在谈论编写新的应用程序,而不是移植现有代码

哦,同样的代码库需要继续在现有的nodejs系统上运行

我看到的问题是vert.x无法正确加载nodejs本机模块。例如,Vert.x因该
要求而阻塞:

var fs = require("fs");
经过一点搜索,我找到了vert.x的等价物:

var fs = require("vertx-js/file_system");
也许我们可以创建一个垫片/抽象层来封装差异。我为文件系统API做了一个快速测试,它似乎加载正确。写一个完整的抽象层似乎是一项相当艰巨的工作。但它似乎可以解决源代码中使用的API的兼容性问题

真正的问题是如何截取
节点模块
目录中的所有
require
语句。这些模块还将需要大量其他本机API,如文件系统。这似乎是其他人可能已经遇到并解决的问题。最好不要重新发明轮子

我可以推出自己的解决方案。我真的不想sed/替换node_模块源,除非作为最后手段。我想到的唯一其他选择是创建一个抽象目录,即在节点路径的头部插入该目录名。这个解决方案似乎可行,但正如我所提到的,我是一个vert.xNoob,所以我无法预见这种方法会有什么陷阱


vert.x是否支持运行nodejs应用程序的填充层?

短版本TLDR

你不能

长版本

Vert.x不是Node.JS的替代品或运行时。尽管有很多相似之处和常见的设计选择,例如支持
CommonJS
模块和支持
NPM
,但本机库并不存在。Vert.x中的所有
I/O
操作都是使用Vert.x API完成的,它们并不总是与节点计数器部件相关

另外,您应该注意到JavaScript语言版本也不一样,例如Node依赖于V8,现在它几乎完全支持
ECMA2015
ES6
。简而言之,Vert.x作为运行在JVM上的框架依赖于Nashorn(来自JDK本身的JavaScript运行时)它仍在
ES5

在Vert.x中支持NPM的想法不是为了模拟节点,而是为了允许使用它的许多模块(不依赖于节点本机模块)。因此,在屏幕上有一个警告。但我想这还不清楚

有一些方法可以最大限度地利用NPM和Vert.x,其中一个选择是使用100%的ES6并使用transpiler,例如,将其传输回ES5,这将在Node和Vert.x上运行良好(直到您使用本机模块为止)


如果您必须使用Node,假设您已经在Node上构建了一个应用程序,并且端口不值得(在资源/时间/等等方面),那么我建议您研究一下。此桥将允许您现有的应用程序生成和使用现有vert.x应用程序集群的消息。

Paulo,非常感谢您的回答。这证实了我的想法。我确实错过了文档中的警告。我们面临的挑战是我们无法运行V8,因为。说来话长。因此,迁移到vert.x将需要大量的返工,但这比从头开始重写要好。谢谢你的帮助!我想你可以试试