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

时间:2016-06-29 17:35:17

标签: javascript node.js vert.x

我是vert.x的新手,我试图看看是否可以在vert.x中启动一个现有的nodejs应用程序。按照http://vertx.io/blog/vert-x3-says-hello-to-npm-users/的说明,我使用npm来安装vert.x.我可以运行一个简单的hello-world应用程序,但运行我们现有的应用程序证明是有点挑战性的。我发现的所有vert.x文档都讨论了编写新应用程序,而不是移植现有代码。

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

我遇到的麻烦是vert.x不会正确加载nodejs本机模块。例如,Vert.x在此require

上被阻塞
var fs = require("fs");

经过一番搜索后,我发现了vert.x等价物:

var fs = require("vertx-js/file_system");

也许我们可以创建一个填充/抽象层来包装差异。我为文件系统API做了一个快速的,它似乎正确加载。看起来好像编写一个完整的抽象层将是一项相当多的工作。但似乎它可以解决我们的源中使用的API的兼容性问题。

真正的麻烦是如何拦截require目录中的所有node_modules语句。这些模块也需要许多其他本机API,如文件系统。这似乎是其他人可能遇到并已经解决的问题。最好不要重新发明轮子。

我可以推出自己的解决方案。除了作为最后的手段,我真的不想sed /替换node_module源。我想到的唯一另一种选择是创建一个抽象目录,在NODE_PATH的头部插入该目录名称。这个解决方案似乎可能有用,但正如我所提到的那样,我是一个vert.x noob所以我不能预见到这种方法会有什么样的陷阱。

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

1 个答案:

答案 0 :(得分:4)

短版TLDR

  

你不能!

长版

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

此外,您应该知道JavaScript语言版本也不相同,例如Node依赖于V8,现在非常接近完全支持ECMA2015ES6,简称Vert.x因为在JVM上运行的框架依赖于Nashorn(来自JDK本身的JavaScript运行时),它仍在ES5上。

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

有一些方法可以最大限度地利用NPM和Vert.x,一种方法是使用100%ES6并使用转发器(如Babel)转换回ES5,这将与Node和Vert.x(直到您使用本机模块的那一刻)。

如果你必须使用Node,假设你已经在节点上构建了一个应用程序并且端口不值(就资源/时间/等而言)那么我建议你查看tcp eventbus bridge 。此桥接器将允许现有应用程序生成和使用现有vert.x应用程序集群的消息。