0
0

More than 1 year has passed since last update.

npm パッケージにOSネイティブファイルを入れて必要な物だけインストールさせる

Posted at

npm パッケージに OS ネイティブのファイルを入れ複数プラットフォームに対応させたいが、容量等の問題で不要な物をインストールさせたくないというケースで、インストール時に必要なファイルだけ取得してくる方法を紹介します。

要約

ネイティブファイルのプラットフォーム毎にパッケージを作成し、package.json の os で対象 OS を指定します。
--save-optional で全プラットフォーム用のパッケージを参照すれば不要な物はスキップされます。

サンプル

解説

サンプルファイルは4つのディレクトリがあり、src がパッケージを参照するソース。nativeTest が参照されるライブラリ、nativeTest-linux, nativeTest-win がそれぞれ linux, windows 用のネイティブファイルです。
src が nativeTest を、nativeTest が nativeTest-linux , nativeTest-win を参照します。

1つのリポジトリに複数の npm パッケージを入れるために gitpkg.now.sh を使用しています。解説はこちらの記事をご覧ください。
githubリポジトリのサブフォルダーからnpm installしたい時

ネイティブファイル用パッケージ

nativeTest-linux , nativeTest-win はテスト用のネイティブファイルとして .sh , .cmd ファイルがおいてあり、echo で文字列を返します。
package.json の os でインストール対象になる OS を指定しているので、対象外の OS にインストールしようとすると失敗します。
https://www.startup-cloud.co.jp/liberty-technology/PublicItems/npm/package.json.html#os

windows 用パッケージを linux 環境にインストールしようとした例: image.png
同様に cpu でアーキテクチャを指定することもできます。
https://www.startup-cloud.co.jp/liberty-technology/PublicItems/npm/package.json.html#cpu

ライブラリ用パッケージ

nativeTest では上記ネイティブファイルを実行し、結果を取得します。
上記2パッケージを参照していますが、普通に参照すると非対応 OS でエラーになります。
--save-optional オプションを付けてインストールすることで非対応 OS でもエラーにならずスキップされます。
package.json には dependencies ではなく optionalDependencies に記述されます。
https://www.startup-cloud.co.jp/liberty-technology/PublicItems/npm/package.json.html#optionaldependencies

{
  "name": "nativetest",
  
  "optionalDependencies": {
    "nativetest-linux": "https://gitpkg.now.sh/Hotspring-r/PlatformSpecificPackageTest/nativeTest-linux?main",
    "nativetest-win": "https://gitpkg.now.sh/Hotspring-r/PlatformSpecificPackageTest/nativeTest-win?main"
  }
}

本体

src では nativeTest を参照しています。
nativeTest がネイティブファイル用パッケージを参照しているため必要な物は自動でインストールされます。

動作確認

Windows

image.png
Windows 環境では nativefile.cmd が実行され、Hello Windows! が表示されます。
image.png
native-linux はインストールされません。

linux

image.png
linux 環境では nativefile.sh が実行され、Hello linux! が表示されます。
警告が出て windows 用パッケージのインストールがスキップされていますが、エラーにはなっていません。

windows で警告が出ない理由はよくわかりません。別の環境では出てたのでバージョンとかだと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0