7

jasmine-node や jshint など、グローバルにインストールする必要がある devDependencies を含む Node モジュールを構築しています。私が本質的に必要としているのは、makefile / npm スクリプト セクションでそれらのバイナリを参照して、テストやリントなどを実行できるようにすることです。つまり、プログラムで require() したくありません。

掘り下げた後、これを処理する方法についてまだ混乱しています:

1)私の最初のアプローチは、これらのモジュールがグローバルにインストールされると想定し、モジュールのドキュメントでこれを明確にし、それらのバイナリをグローバルとして参照することでした-つまり、それらがグローバルに利用可能であると期待します. これは、このアドバイスと矛盾します

グローバルにインストールされたバイナリを参照しないようにしてください。代わりに、隠し .bin ディレクトリにバイナリをインストールするローカルの node_modules を指定します。モジュール (この場合は「mocha」) が devDependencies の下の package.json にあることを確認して、npm install を実行したときにバイナリがそこに配置されるようにします。

この投稿から取得)

前述のセットアップはかなり壊れやすいため、これは一般的に正しいように思えます。

2) 私の次のアプローチは、これらのモジュールを devDependencies に明示的に含めることでした (ただし、それらはまだ私のシステムにグローバルにインストールされています (そして、おそらくユーザーと貢献者のシステムにも))。これにより、必要なときに適切なバージョンのバイナリが確実に存在し、.NET を通じて参照できるようになりましたnode_modules/.bin/

しかし、私は今、このアドバイスと矛盾しています

require() する場合は、ローカルにインストールしてください。

( npm docsから取得)

それにもかかわらず、グローバルにインストールされたモジュールに対してnpm install実際には何も取得しない(ネットワーク アクティビティを表示しない)ことに気付きました。


私の質問:

  • グローバルにインストールされたモジュール (devDependencies に記載されている) のローカル バージョンは、グローバル モジュールのスナップショット (コピー) にすぎnpm installませんか?
  • 2)これを行う正しい方法はありますか? または、私が見逃している他の練習がありますか?
4

2 に答える 2

7

これは、node.js の一般的な慣行とは明らかに異なりますが、全体的に優れたアプローチだと思います。これについては、私自身のブログ投稿 (自己宣伝に関する免責事項、yada yada) Managing Per-Project Interpreters and the PATHで詳しく説明しています。

それは基本的に次のように要約されます。

  1. npm -g は絶対に使用しないでください。グローバル モジュールをインストールしないでください。
  2. projectDir/node_modules/.bin代わりに、代わりに含めるように PATH を調整します
于 2013-06-20T17:40:40.417 に答える