6

たとえば、Nodeモジュールを一元化された場所に保存し、/var/http/common/アプリを別の場所でライブ/実行したいとし/var/http/www/apps/APP#1_NAME/ます。

server.jsのような相対パスを使用するようにrequiresを設定できましたが、NPMの作成者による投稿require('../../../common/express')を読んだところ、ハッキングしているようです。Nodeの「ローカル」参照を作成するために使用する必要があります(これは、実際のインストール)。npm link

最初にノードモジュールをにインストール/var/http/common/しましたが、シンボリックリンク(npm link ../../../common/node_modules/express)を作成しようとすると、npmはそれを「グローバル」インストールのように扱い、express inを再インストールしました/usr/local/lib/node_modules/express(そしてそれに「ローカル」シンボリックリンクを作成しました./node_modules/express ->)これは私が期待していたことではありません。これは私が実際に欲しいものですか?私はnpm config set prefix最初に使うべきでしたか?

4

2 に答える 2

3

結局のところ、私はnpm config set prefix他のことをする前に設定する必要がありました。

npm linkそのように見えて、npm install -g同じことをするかもしれません。ただしnpm link、モジュールをグローバルにインストールする一方で、を指すローカルシンボリックリンク作成します。MaxGfellerが正しくありません:そのローカルシンボリックリンクがないと、Nodeは(グローバルにインストールされた)モジュールが見つからないと文句を言います。これは私自身の試みによって決定され、以下から推測されます:node_modules$prefix/lib/node_modules/$modulenpm help folders

•required ()する場合は、ローカルにインストールします。

•コマンドラインで実行する場合は、グローバルにインストールします。

•両方が必要な場合は、両方の場所にインストールするか、npmlinkを使用します。

これは私が尋ねたことに特に対処していません:モジュールを中央の場所に保存したい(複数のノードアプリケーションからアクセスできるようにしたい)が、次のようなコマンドからモジュールを使用することは気にしません-私はそれらを使用したいだけですでrequire('')

で相対パスを使用することについての私の質問についてはrequire('')、それに対する信頼できる答えはまだ得られていませんが、npm linkrelパスを使用することは著者の意図ではないように思われます。私には6対1の場合のように見えますが、ノードの標準との一貫性を保ちたいと思います。

于 2012-12-18T23:23:51.693 に答える
2

コマンドに「-g」を追加することにより、を使用してノードモジュールをグローバルにインストールできます。例えば:

npm install express -g

コードでは、通常どおりに使用できます。

require('express');

その後、モジュールは/ usr / local / lib/node_modulesに保存されます

于 2012-12-13T20:32:19.517 に答える