gulpに関する2つのマニュアルによると、最初にgulpをグローバルに(-gフラグを付けて)インストールし、次にローカルにもう一度インストールする必要があります。なぜこれが必要なのですか?
gulpに関する2つのマニュアルによると、最初にgulpをグローバルに(-gフラグを付けて)インストールし、次にローカルにもう一度インストールする必要があります。なぜこれが必要なのですか?
回答:
ツールをグローバルにインストールする場合、ユーザーはノードプロジェクトの外部を含む任意の場所でコマンドラインユーティリティとして使用します。ノードプロジェクトのためのグローバル・インストールは、悪い彼らは、展開をより困難にするため。
にnpx
バンドルされているユーティリティは、npm
5.2
この問題を解決します。これにより、グローバルにインストールされたユーティリティと同様にローカルにインストールされたユーティリティを呼び出すことができます(ただし、コマンドはで始める必要がありますnpx
)。たとえば、ローカルにインストールされたを呼び出すeslint
場合は、次のようにできます。
npx eslint .
script
package.jsonのフィールドで使用npm
するnode_modules
と、ツールとグローバルにインストールされたモジュールが検索されるため、ローカルインストールで十分です。
したがって、(package.jsonで)満足している場合:
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
等で実行するとnpm run test
、グローバルインストールはまったく必要ありません。
どちらの方法もsudo
必要ないため、プロジェクトをセットアップするのに役立ちます。またgulp
、package.jsonでバージョンがバンプされたときに更新されるため、プロジェクトで開発するときに全員が同じバージョンのgulpを使用することになります。
グローバルで使用した場合、gulpにはいくつかの異常な動作があるようです。グローバルインストールとして使用される場合、gulpはローカルにインストールされたgulpを探し、制御を渡します。したがって、gulpグローバルインストールが機能するには、gulpローカルインストールが必要です。上記の答えはまだ残っています。ローカルインストールは、グローバルインストールより常に望ましい方法です。
./node_modules/.bin/gulp
。
gulp
したcoffee
ので、コマンドはノードプロジェクトのルート(例:)から機能しますalias gulp="node_modules/.bin/gulp"
。このように、コマンドは必要に応じて簡単に使用でき、グローバル/ローカルバージョンの競合は発生しません。
gulp
と、次のエラーメッセージが表示されますLocal gulp not found in ...
。私が理解している限り、まずローカルのnode_modulesを調べ、見つからない場合はグローバルにインストールされているモジュールを調べます。ありがとう!
TLDR; ここだ理由:
これが機能する理由は、のローカルにインストールされたバージョンを使用して
gulp
を実行しようとするためです。ここを参照してください。したがって、gulpのグローバルおよびローカルインストールの理由。gulpfile.js
gulp
基本的に、gulp
ローカルにインストールする場合、スクリプトはに含まれてPATH
いないgulp
ため、入力してシェルがコマンドを見つけることを期待することはできません。グローバルディレクトリをインストールすると、グローバルディレクトリがパス上にある可能性が最も高いため、gulp
スクリプトが実行されます。PATH
node/bin/
ただし、ローカルの依存関係を尊重gulp
するには、ローカルにインストールされたバージョンのそれ自体を使用してを実行しgulpfile.js
ます。
gulp
パッケージはnode_modules/.bin/gulp
パスを入れるために必要です。ストレージは安価ですが、シンボリックリンクをシミュレートするためにMBを破棄することは、IMOの純粋なだらしさです。
グローバルにgulp
ローカルにインストールされた
npm link gulp
npm link
ます。
「なぜgulpをグローバルおよびローカルにインストールする必要があるのか」という質問は、次の2つの質問に分類できます。
すでにグローバルにインストールしているのに、ローカルでgulpをインストールする必要があるのはなぜですか?
ローカルにgulpをインストールしているのに、なぜgulpをグローバルにインストールする必要があるのですか?
他のいくつかは、これらの質問に対する優れた回答を単独で提供していますが、情報を統合された回答に統合することが有益だと思いました。
すでにグローバルにインストールしているのに、ローカルでgulpをインストールする必要があるのはなぜですか?
gulpをローカルにインストールする理由には、いくつかの理由があります。
ローカルにgulpをインストールしているのに、なぜgulpをグローバルにインストールする必要があるのですか?
ローカルでのインストールを回避するにはnpm link [package]
、を使用できますが、linkコマンドとinstall --global
コマンドはこの--save-dev
オプションをサポートしていないようです。つまり、gulpをグローバルにインストールして、目的のバージョンを簡単に追加する簡単な方法がないようです。ローカルのpackage.jsonファイル。
結局のところ、特にgrunt、gulp、jshintなどの開発ツールの場合は、グローバルモジュールを使用して、すべてのプロジェクトに共通のツールのインストールを複製する必要がないようにする方が理にかなっていると思います。残念ながら、穀物に逆らうと、ツールと少し戦うことになるようです。
私の問題がgulpをローカルにのみインストールすることに直接関連していたかどうかはわかりません。しかし、私たちはたくさんの依存関係を自分でインストールする必要がありました。これは「巨大な」package.jsonにつながり、gulpをローカルにのみインストールすることが本当に素晴らしいアイデアであるかどうかはわかりません。ビルド環境のために、そうする必要がありました。しかし、絶対に必要でなければ、gulpをグローバルにインストールすることはお勧めしません。次のブログ投稿で説明されているように、同様の問題に直面しました
すべての開発者がgulpをグローバルにインストールしているため、これらの問題はローカルマシンの開発者には起こりません。ビルドシステムでは、説明した問題がありました。誰かが興味を持っているなら、私はこの問題をより深く掘り下げることができます。しかし、現時点では、gulpをローカルにのみインストールするのは簡単な方法ではないことをお伝えしたいと思います。
ここで見たことがないからといって、MacOSまたはLinuxを使用している場合は、これを(bashrcなどの)PATHに追加することをお勧めします。
node_modules/.bin
この相対パスエントリを使用すると、ノードプロジェクトのルートフォルダーにいる場合、「グローバルインストール」npm run
などを気にすることなく、コマンドラインツール(eslint、gulpなど)を実行できます。
これを行ったら、モジュールをグローバルにインストールしたことはありません。