node.js用の既成のネイティブモジュール

nodejsに慣れていない場合、nodejsの利点の1つはネイティブモジュールを作成できることです 。 通常、システムへの低レベルのアクセスが必要な場合に使用されます。 ネイティブモジュールの開発者は、コードの移植、テスト、および配布に関連する多くの問題に直面しています。 後者に注目したいのです。







すべてが単純に思えます。モジュールを作成し、jsラッパーを作成し、テストして公開します。 どんなに。 標準のjsモジュールとは異なり、ネイティブモジュールをインストールするには、gcc / visual studio /などのビルド環境が必要です。 また、Linuxディストリビューションですべてが簡単な場合、すべてのスクリプト作成者がWindowsシステムにc ++コンパイラをインストールしているわけではありません。 さらに、モジュールが依存する各モジュールには、インストール用のビルド環境も必要です。 それではどうしますか?







ほとんどの人がtravis / appveyorを使用してコードをテストしていると思います。 ネイティブモジュールのみがテスト前にアセンブリサイクルに合格します。 パッケージを公開して、収集したすべてのバイナリをCIから取得するのは悪くありません。 幸いなことに、他の開発者も同じように考えて、そのようなシステムを作成しました。 3つのモジュールで構成されます: prebuildはモジュールのコンパイルを支援し、 prebuild-ciは既製のアセンブル済みモジュールをCIから取得します。前回のコミットでパッケージバージョンに変更があった場合、 prebuild-installはアセンブル済みモジュールをインストールします。







このシステム全体のセットアップは非常に簡単です。 最初に、アセンブリを構成する必要があります。 prebuild



がこれを担当し、nodejsソースコードの正しいバージョンをダウンロードし、。 ./prebuild



フォルダー内のモジュールをコンパイルします。 ここで重要な点は、依存関係をインストールするときにnode-gyp



を使用してコンパイルしないようにするには、初期化スクリプトを無効にする必要があることです。







 yarn install --ignore-scripts #  npm i --ignore-scripts
      
      





その後、prebuild prebuild --strip



build prebuild --strip



を書くだけです! --strip



スイッチを追加して、バイナリからすべての不要な情報を確実に削除します。 次に、テストアセンブリが開始され、ここでprebuild-ci



役立ちます。 テストのパイプラインに含めると、それ自体からモジュールを選択して入力する必要があることがわかります。







 ava test/*.js && prebuild-ci
      
      





prebuild-ci



正しく機能するには、CIでgithubトークンを使用してenv変数PREBUILD_TOKENを設定する必要があります。 これは、githubリリースの作成を可能にし、収集されたバイナリをこのリリースにロードするために必要です。 トークンはhttps://github.com/settings/tokensで設定されます 。 [ Generate new token



]をクリックし、名前を指定して、[ Generate token



]をクリックしGenerate token



repo



権利を設定することをお勧めしますが、著者は十分なデフォルトがあるべきだと書いています。 トークンの詳細については、元のreadmeをご覧ください。







その後、次回リリースするときに、CIに組み込まれているすべてのモジュールがgithubリリースに移動します。 すべてのテストが完了し、すべてのモジュールがビルドされるまで待ってから、npmでパッケージを公開することを強くお勧めします。 ところで、 np



を使用してパッケージを公開する場合、対応する問題があります。







最後に、パッケージマネージャーにモジュールのインストール方法を伝える必要があります。 これにはnpmスクリプトinstall



ステージがあります。 モジュールのインストール後に機能します。 パッケージマネージャーはprebuild-install



を起動し、次に既製のバイナリをprebuild-install



ます。 それでも、既製のパッケージがないユーザーが標準的な方法でモジュールをアセンブルできるように、最後にnode-gyp rebuild



を指定することをお勧めします。







 "scripts": { "install": "prebuild-install || node-gyp rebuild" }
      
      





バインディングを使用して完成したモジュールを接続できます 。 さて、これらのいくつかの簡単な手順で、ユーザーはあなたに感謝するでしょう。 node-process-listまたはleveldownで、このシステムがどのように見えるかを確認できます。








All Articles