web-dev-qa-db-ja.com

「npm link x」と「npm install / path / to / x」の違い

私はの違いを理解したと思った

npm link x

そして

npm install /local/path/to/x

元々、前者はxへのシンボリックリンクを作成し、後者はシンボリックリンクではなくxの個別のコピーをプロジェクトにインストールしたと思っていました。

しかし、私は最近、私の元の印象が間違っていたことに気付きました、そして、彼らは両方ともシンボリックリンクを使用しているようです-それで、2とそれの間に違いがありますか?

28
Alexander Mills

ミディアムに関する記事 アレックス・ミルズによる裸のレイアウト。

npm link xおよびnpm install /local/path/to/xは次のとおりです。

  1. 大きな違いは、npm install /local/path/xはpreinstall/postinstallフックを実行しますが、npm link x しない。

  2. npm linkはグローバルNPMスペースを使用し、npm install /local/path/x ではない。 npm linkは、グローバル空間でxへのシンボリックリンクを作成し、次にyからnpm link xを呼び出すと、xへ直接ではなく、グローバルシンボリックリンクへのシンボリックリンクを作成します。異なるグローバルnode.jsバージョン(NVMなど)を使用している場合、これは重要な違いです。

  3. npm install /absolute/path/xはpackage.jsonを変更します、npm link x ではない。

シンボリックリンクの代わりに新しいローカルコピーを取得するには、npm pack、 そのようです:

tgz="$PWD/$(npm pack)"
cd <other project>
npm install "$tgz"

Cp/rsyncを使用することもできますが、インストールフックは実行されず、実行可能ファイルはnode_modules/.bin...それは動作します。

17
Alexander Mills

npm link

npm link
npm link <folder>

上記のコマンドは両方とも、グローバルパッケージに<folder>のシンボリックリンクを作成します。

npm link <folder>は、現在のプロジェクトでもnode_modulesフォルダーに同じシンボリックリンクを作成します。これらの名前は、リンクしているフォルダー名ではなく、package.jsonのプロジェクト名に基づいています

現在のプロジェクトのpackage.jsonは変更されません。

ここのコードでわかるように、パッケージの依存関係は引き続きインストールされます

https://github.com/nodejs/node/blob/31d5bdea70e44802918d6f4aa7c378bc1992be54/deps/npm/lib/link.js#L156

まとめると

  1. グローバルフォルダーにシンボリックリンクを作成します(常に)
  2. Package.jsonは変更されません。
  3. 不足している依存関係はインストールされます

npm install

npm install <folder>はこれと少し異なります

  1. グローバルフォルダにシンボリックリンクを作成しません
  2. Package.jsonへの参照を変更して追加します
  3. 元のフォルダーへのシンボリックリンクを作成します
5
Tarun Lalwani