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で、このシステムがどのように見えるかを確認できます。