web-dev-qa-db-ja.com

.nodeファイルの使用方法

node_mouse をインストールしようとしていましたが、ノードモジュールフォルダーを調べたところ、通常の.jsファイル拡張子の代わりに、.nodeファイル拡張子が見つかりました。どうすればnode_mouseを実行できますか?私はこれを調べましたが、C++で書かれたアドオンかもしれないと思いますが、正確にはわかりません( Node addons

14
idude

うん、これらの.nodeファイルはNodeアドオン(バイナリモジュール)であり、それらに対してrequire()を使用するだけでよいはずです。.jsonおよび.jsファイルを探すことに注意してください最初。

ドキュメント から:

コンパイルされたアドオンバイナリのファイル名拡張子は(.dllまたは.soではなく).nodeです。 require()関数は、.nodeファイル拡張子を持つファイルを検索し、それらを動的にリンクされたライブラリとして初期化するように記述されています。

Require()を呼び出すとき、.node拡張子は通常省略でき、Node.jsは引き続きアドオンを見つけて初期化します。ただし、注意点の1つは、Node.jsが最初に、同じベース名を共有するモジュールまたはJavaScriptファイルを見つけてロードしようとすることです。たとえば、バイナリaddon.nodeと同じディレクトリにファイルaddon.jsがある場合、require( 'addon')はaddon.jsファイルを優先し、代わりにロードします。

また、これらはバイナリモジュールであることにも注意してください。ロードは、標準の実行可能ファイルを実行するのとよく似ています(Windowsに精通している場合は.exeファイルを考えてください)。ネイティブ実行可能ファイルと同様に、それらはシステムの詳細に大きく依存し、セキュリティリスクを引き起こす可能性もあります。標準の.jsモジュールは移植可能ですが(いくつかの注意点があります)、.nodeバイナリモジュールは、特定のマシンアーキテクチャとOS、および特定のバージョンのNodeに対しても基本的に構築されます。バイナリモジュールのロードに問題がある場合は、システムに適したバージョンを実行していることを確認し、システムが実際にサポートされていることをプロバイダーに確認する必要があります。

特定の機能やパフォーマンスのニーズで必要になることもありますが、Node.jsでは、本当に必要でない限り、バイナリモジュールをロードしないでください。

5
ChrisM

はい、通常の「必要」な使用法が.nodeファイルに適しています。これらのファイルのポイントは、通常のノードが必要とするように参照できるポータブルバイナリ(C++のnode-gypを使用)を作成することです。 node addon docs のhello.jsセクションを参照してください:

const addon = require('./build/Release/addon');

console.log(addon.hello());

このNPMライブラリを調べた後、いくつかの異なるノードバージョンを持つWindows、Mac、およびLinux VMでノードによって正しく読み込まれますが、バイナリがエラーの配列をスローします。 Windowsでは、ビルドターゲットとして特定のバージョンのウィンドウがあります(Windows 10がエラーをスローするため、NTの可能性があります)。

Error: %1 is not a valid Win32 application.

OS Xでは、これはdyldがバイナリによって参照される共有ライブラリを開けないことです。 (man dlopenを参照):

Error:dlopen(/.../node_mouse/node_mouse.node, 1): no suitable image found. 

Linuxでは、ELFヘッダーエラーが表示され、このOSではバイナリを実行できないことが通知されます。

Error: /app/available_modules/1484064894000/node_mouse/node_mouse.node: invalid ELF header

author は多くのWindows NT作業を行うようです。そのため、これが本当に必要な場合は、すべての開発アドオンを含むWindows NTの新しいコピーを見つけてください。

最後に、コードベース(特にマウスの動きを制御するもの)でサードパーティのクローズドソースバイナリを実行する場合のセキュリティリスクを考慮してください。

5
Jack Wade