web-dev-qa-db-ja.com

package.jsonを介した「グローバルな」npm依存関係のインストール

パッケージがnpm installを介してインストールされたときに、コマンドラインを介して自動的にインストールおよび実行できるようにする「グローバル」な依存関係(jshint、cssslint、busterなど)がいくつかあります。これは可能ですか?

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

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

更新:ちょうど この機能のリクエスト npmに出会いました。 package.json内のscripts configを使用する方法があるようです。

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

75
uglymunky

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

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

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

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

{
    // ...,

    "scripts": {
        "preinstall": "grunt"
    }
}
52

ローカルの依存関係をインストールし、PATHを./node_modules/.binに設定するbashスクリプトを使用するパターンが本当に好きです。

ファイル: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スクリプトと組み合わせた場合:

ファイル:Makefile

lint :
    ./env.sh csslint my_styles

ファイル:package.json

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

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

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

29
EndangeredMassa

これを試してください: https://github.com/lastboy/package-script

Package.jsonからグローバルnpmパッケージを直接インストールするために使用しています。技術的な知識がないクライアントに適しています。

パッケージが既にインストールされているかどうか、インストールされていない場合もチェックします!

8
CMCDragonkai