69

npm package.json ファイルで OS 固有の依存関係を指定する方法はありますか?

たとえば、ユーザーが Linux を実行している場合、モジュールの依存関係として'dbus' ( https://npmjs.org/package/dbus )をインストールしたいだけです。Mac と Windows では依存関係が異なります。

4

4 に答える 4

41

設定によっては、これを行う良い方法があります。

npm package.json はosキーをサポートしています。

また、optionalDependencies

  • osモジュールをインストールできる OS を指定するために使用できます。
  • optionalDependenciesモジュールの依存関係であり、インストールできない場合、npm はそれらをスキップしてインストールを続行します。

このようにして、モジュールに各 OS のオプションの依存関係を持たせることができ、動作するモジュールのみがロード/インストールされます ^.^

編集: @Sebastien が以下で言及しているように、このアプローチは危険です。どの OS でも、依存関係の少なくとも 1 つが「必須」で、残りは「オプション」です。依存関係のすべてのバージョンをオプションにするということは、インストールが正当な理由で失敗した場合に、インストールを黙ってスキップし、本当に必要な依存関係が失われることを意味します。

于 2014-09-26T23:14:52.397 に答える
9

短い答えはノーだと思います。ただし、いくつかの回避策を考えることができます。最も簡単なのは、OS に関係なくすべてを package.json に追加しrequire()、実行時に正しいものを追加することです。

それがうまくいかない場合は、インストール スクリプトを使用して目的の結果を得ることができる場合があります - https://docs.npmjs.com/misc/scripts

私はこれをテストしていませんが、うまくいくと思います:

次のようなものを package.json に追加します。

,"scripts": {
  "install": "node install_dependencies.js"
}

install_dependencies.js次に、OS をチェックして適切なコマンドを実行するファイルを追加しnpm install ...ます。

于 2013-03-27T21:42:19.060 に答える