npmを使用してローカルモジュールをインストールしますか?


419

ダウンロードしたモジュールリポジトリがあります。別のディレクトリにグローバルにではなく、ローカルにインストールしますか?

これを行う簡単な方法は何ですか?

回答:


481

NPM-リンクのドキュメント

ローカルモジュールディレクトリ:

$ cd ./package-dir
$ npm link

モジュールを使用するプロジェクトのディレクトリ:

$ cd ./project-dir
$ npm link package-name

または、相対パスを使用して一度に:

$ cd ./project-dir
$ npm link ../package-dir

これは、上記の2つのコマンドを内部で使用することと同じです。


14
これは私がこれまでに見た唯一の正気なアプローチです-なぜnpmはそれほど曖昧/鈍感でなければならないのですかw。ローカルパッケージの作成、インストール、使用についてはわかりません...リンクは機能します(そしてすばらしい)が、用語はやや混乱しています。
smaudet 2015

6
@リッチアポダカ、ドキュメントリンクをありがとう。プロセスを元に戻すことについては触れていません。シンボリックリンクを作成するだけなので、通常どおり削除できますか?
タイラーコリアー

1
@TylerCollier NPMリンク解除は、鏡像操作であると思われるstackoverflow.com/a/24940024/54426
リッチApodacaの

1
ただ、Angular2(または他のアプリケーション?)を使用している場合、npmリンクが特定の種類の問題の根本的な原因であるという話題があります。ここここの
The Red Pea

4
ただしnpm link、外部依存関係の2番目のインスタンスが作成されることに注意してください。あなたは、パッケージAの必要性のBとCを持っているのであれば、Bを結ぶBの必要性C.は、アプリケーションAはCの2つのインスタンス持つことになります
user2167582

422

に1つの<folder>引数を指定するだけでnpm install、引数はパッケージ名ではなくローカルフォルダーを指す必要があります。

npm install /path

5
リンクとは異なり、これは.npmignoreを使用します。
Camille Wintz 2017

30
@bithavoc少なくともnpm 5以降、フォルダーをインストールすると、コピーではなくシンボリックリンクが作成されるようになりました。docs.npmjs.com/cli/installを
Frank Tan

3
私はこの方法を使用しようとしましたが、私のモジュールはそれがpeerDependenciesを見つけることができません。
Witalo Benicio

1
回答のスクリプトを実行するrm -rf node_modules前とnpm install後がいいです。
Renatoは

3
@FrankTanはい、しかしどのように古い動作を取得するのですか?私が欲しいのコピーを!
Michael

151

同じ人から質問と回答があったので、代わりにnpmリンクを追加します。

ドキュメントから:

これは、独自のものをインストールするのに便利です。そのため、継続的に再構築しなくても、作業を繰り返してテストできます。

cd ~/projects/node-bloggy  # go into the dir of your main project
npm link ../node-redis     # link the dir of your dependency

[編集] NPM 2.0以降では、package.jsonでローカル依存関係を宣言できます

"dependencies": {
    "bar": "file:../foo/bar"
  }

11
それは質問の本来の意図ではないかもしれませんが、おそらくそれはグーグルを通じてこれを見つけたほとんどの人が望んでいることです。
Dusty J

1
この回答は不完全なようです。npm link(グローバルシンボリックリンクを作成するために)フォルダーに対して1回実行し、次にnpm link package-name(プロジェクトでグローバルシンボリックリンクを使用するために)プロジェクトのフォルダー内で実行する必要があります。以下の答えは正しい答えです。
Thomas Potaire、2014年

8
@ThomasPotaire両方の答えが正しいです。npm linkのドキュメントを見ると、両方の方法が示されています。この相対ディレクトリアプローチは省略形です。
MJ

1
2番目の方法(file:アプローチを使用)では、アプリとローカルモジュールが依存関係を共有できました。私のテストのnpm link結果、依存関係が重複しました。依存関係をシングルトンとして使用する必要がある場合は、依存関係が壊れます。
Daniel Waltrip 2017年

ローカルパッケージ(たとえば、package1)がありました。package2には、package1の相対パスで言及された依存関係があります。npm相対パスが "file:../../ package1"で始まり、 '' .. / .. / package1 "のときに機能している場合、パッケージをインストールしません。最初にファイルを追加すると、他に何か意味がありますか?
Dip686

17

npm pack + package.json

これは私のために働いたものです:

ステップ1:でmodule project、次を実行しnpm packます。

これで<package-name>-<version>.tar.gzファイルが作成されます。

ステップ2:ファイルを consumer project

理想的にtmpは、consumer-projectルート内のフォルダーにそのようなファイルをすべて置くことができます:

ステップ3:あなたの中でそれを参照してくださいpackage.json

"dependencies": {
  "my-package": "file:/./tmp/my-package-1.3.3.tar.gz"
}

ステップ4:Installパッケージ:

npm installまたはnpm iまたはyarn

これで、パッケージはconsumer-project's node_modulesフォルダーで使用できるようになります。

幸運を...


10

ローカルモジュールに、プロジェクトのスコープにのみインストールするピア依存関係がある場合、これらのアプローチ(npm linkまたはpackage.jsonファイル依存関係)はどちらも機能しません。

例えば:

/local/mymodule/package.json:
  "name": "mymodule",
  "peerDependencies":
  {
    "foo": "^2.5"
  }

/dev/myproject/package.json:
  "dependencies":
  {
    "mymodule": "file:/local/mymodule",
    "foo": "^2.5"
  }

このシナリオでは、npmはを次myprojectnode_modules/ように設定します。

/dev/myproject/node_modules/
  foo/
  mymodule -> /local/mymodule

nodeが読み込まれmymodule、それが実行されるとrequire('foo')、nodeはmymoduleシンボリックリンクを解決し、見つからない/local/mymodule/node_modules/(およびその祖先)のみを探しfooます。代わりに、/local/myproject/node_modules/私たちがプロジェクトを実行している場所でfooあり、インストールされている場所であるため、nodeにを表示させる必要があります。

だから、我々には、いずれかのノードを伝える方法を必要としないこのシンボリックリンクを解決するために探しているときfoo、または我々はインストールするには、NPMを指示する方法必要なコピーmymoduleファイルの依存関係の構文を使用しているときにpackage.json。残念ながら:(


がインストールされNODE_PATHているnode_modules/場所を指すように設定するという回避策を見つけましたfoo。したがって、上記の場合のために、それはこのようになります: NODE_PATH=/dev/myproject/node_modules/ 許可することをmymodule発見しますfoo
Paul Medynski、

解決策があります。依存関係モジュールをプロジェクトのルートフォルダーに配置します。通常の'file:'プレフィックスを使用して、package.jsonで依存関係を定義します。Do npm iこれにより、プロジェクトのnode_modulesにシンボリックリンクが作成されます。また、他のタイプの依存関係の場合と同様に、その依存関係がトップレベルのnode_modulesに巻き上げられる場合があります。私のnpmバージョンはv6.14.4です。これを修正する方法に数時間を費やした後、この解決策をここに見つけました:(atmos.washington.edu/~nbren12/reports/journal/…)。ありがとうnbren12。
sasebot

私は同じ問題を抱えていました。私はこの答えを見つけました:stackoverflow.com/questions/50807329/…、これはピアの依存関係とローカルライブラリに関する私の問題を解決します。
16:04

0

メインプロパティがありませんか?

以前の人々が答えたようにnpm --save ../location-of-your-packages-root-directory../location-of-your-packages-root-directoryしかし、それが機能するためには二つのものを持っている必要があります。

1)package.jsonそのディレクトリで

2)mainでプロパティpackage.jsonを設定する必要があり、作業IG "main": "src/index.js",場合のエントリファイル../location-of-your-packages-root-directoryIS../location-of-your-packages-root-directory/src/index.js

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.