86

私のパッケージが 経由でインストールされたときに、コマンドライン経由で自動的にインストールして実行したい "グローバル" 依存関係 (jshint、csslint、buster など) がいくつかありますnpm install。これは可能ですか?

現在、私は次のことを手動で行っています。

  1. npm install -g <package_name>
  2. 私のプロジェクト内から:npm link <package_name>

更新: npm のこの機能要求に出くわしました。scriptspackage.json 内の構成が進むべき道のようですか?

もう一度更新: または、npm docsを読んだ後、おそらく.gyp ファイルを使用することになっていますか? よくわかりません。

4

3 に答える 3

58

から依存関係を「グローバル」として指定することはできませんpackage.json。そして、これはあなたが参照したその機能要求でIsaac が述べているように設計によるものです。

ええ、私たちはこれを行うつもりはありません。

ただし、パッケージがローカルにインストールされている場合でも、「バイナリ」を使用できます。彼らは中にいるでしょう.../node_modules/.bin/preinstallそして、それらをスクリプトでキューに入れることができるはずです。

ただし、一連のコマンドがかなり長い場合 (「jshint 、 csslint 、 buster などgrunt」が示唆するように) 、さまざまなタスクを実行するなどのビルド ツールの使用を検討することをお勧めします。

{
    // ...,

    "scripts": {
        "preinstall": "grunt"
    }
}
于 2013-02-02T01:49:03.470 に答える
35

ローカルの依存関係をインストールしてから、PATH を に設定する bash スクリプトを使用するパターンが本当に気に入っています./node_modules/.bin

ファイル: env.sh

# Add your local node_modules bin to the path for this command
export PATH="./node_modules/.bin:$PATH"

# execute the rest of the command
exec "$@"

次に、このスクリプトを任意の bash コマンドの前に使用できます。これを Makefile または npm スクリプトと組み合わせると、次のようになります。

ファイル: メイクファイル

lint :
    ./env.sh csslint my_styles

ファイル: package.json

"scripts": {
  "lint": "./env.sh csslint my_styles"
}

これらのファイルのこのタスクは、グローバルな場所で csslint を参照しているように見えますが、実際には node_modules ビンのバージョンを使用します。

これの本当に素晴らしい利点は、他のノード モジュールと同様に、これらの依存関係を簡単にバージョン管理できることです。グローバル インストール ソリューションに固執すると、他のプロジェクトの 1 つに必要なユーザーのシステム上の特定のバージョンが上書きされる可能性があります。

于 2013-02-02T02:08:19.687 に答える