2016-06-29 17 views
2

私はvert.xを全く新しくしました。私は、vert.xで既存のnodejsアプリケーションを起動することが可能かどうかを調べようとしています。 http://vertx.io/blog/vert-x3-says-hello-to-npm-users/の指示に従って、私はvert.xをインストールするためにnpmを使いました。私は単純な世界一のアプリを走らせることができますが、既存のアプリを走らせることはちょっと難しいことです。私が見つけたすべてのVert.xのドキュメントは、新しいアプリケーションの作成について話し、既存のコードを移植しているわけではありません。vert.xでnode.jsアプリケーションを実行するにはどうすればよいですか?

ああ、既存のnodejsシステムで同じコードベースを実行し続ける必要があります。

私が見ている問題は、vert.xがnodejsネイティブモジュールを正しくロードしないことです。例えば、Vert.xはこのrequireに窒息:

var fs = require("fs"); 

少し検索した後、私はvert.x相当を見つけました:

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

おそらく、我々は違いをラップするために、シム/抽象化レイヤーを作成することができます。私はファイルシステムAPIのための速いものをして、それは正しくロードされるようだ。抽象レイヤー全体を書くのはかなりの労力がかかるようです。しかし、私たちのソース内で使用されているAPIの互換性の問題を解決するようです。

node_modulesディレクトリにあるrequire文をすべて傍受するのが実際の問題です。これらのモジュールは、ファイルシステムのような他の多くのネイティブAPIも必要としています。これは他人がすでに遭遇し解決している問題のようです。ホイールを再発明しない方がいいです。

私自身のソリューションをロールすることができました。最後の手段を除いてnode_moduleソースをsed/replaceすることは本当にありません。私が考えている唯一の他の選択肢は、NODE_PATHの先頭にディレクトリ名を挿入する抽象ディレクトリを作成することです。この解決策はうまくいくかのようですが、私が言及したように、私はvert.x noobですので、そのアプローチにどんな落とし穴があるのか​​見逃すことはできません。

vert.xはnodejsアプリケーションを実行するためのシムレイヤーをサポートしていますか?

答えて

3

ショートバージョンTLDR

あなたがすることはできません!

ロングバージョン

Vert.xはNode.jsの交換やランタイムではありません。 CommonJSモジュールのサポートとNPMのサポートのような、非常に類似した共通の設計選択肢がありますが、ネイティブライブラリは存在しません。 Vert.xのすべてのI/OオペレーションはVert.x APIを使用して実行され、ノードカウンタの部分には必ずしも関連しません。

また、JavaScriptのバージョンも同じではないことに注意してください。たとえば、NodeはV8に依存していますが、最近では、ECMA2015またはES6を完全にサポートしています。まだES5にあるNashorn(JDK自体のJavaScriptランタイム)に依存しています。

Vert.xでNPMをサポートするという考えは、ノードをエミュレートするのではなく、(モジュールのネイティブモジュールに依存しない)多くのモジュールを使用できるようにすることでした。そのため、documentationに警告があります。しかし、私はそれがはっきりしないと思います。

NPMとVert.xを最大限に活用するにはいくつかの方法がありますが、1つの選択肢は100%ES6に行き、Babelなどのトランスパイライザを使用してES5に戻します。 (ネイティブモジュールを使用する瞬間まで)。

ノードを使用する必要がある場合は、アプリケーションが既にノード上に構築されており、ポートが価値がない(リソース/時間/などの点で)と言う場合は、tcp eventbus bridgeを調べることをお勧めします。このブリッジにより、既存のアプリケーションで既存のvert.xアプリケーションのクラスタのメッセージを生成して使用することができます。

+1

Paulo、私はあなたの答えをありがとう。これは私が何を考えているかを確認します。私はドキュメントでその警告を見逃していました。私たちが直面している課題は、V8を実行できないということです。 。 。よく、長い話。したがって、vert.xに移行するにはかなりの量のリワークが必要ですが、ゼロからリライトするよりも優れています。ご協力いただきありがとうございます! –

関連する問題