web-dev-qa-db-ja.com

npmを使ってローカルモジュールをインストールする?

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

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

332
fancy

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

npm install /path
333
fancy

npm-linkのドキュメントから

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

$ cd ./package-dir
$ npm link

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

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

あるいは相対パスを使って一度に:

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

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

420
Rich Apodaca

同じ人から聞いてきたので、代わりに 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"
  }
129
Luke W

プロジェクトのスコープにのみインストールするピア依存関係がローカルモジュールにある場合、これらのアプローチ(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

ノードがmymoduleをロードし、require('foo')を実行すると、ノードはmymoduleシンボリックリンクを解決し、foo/local/mymodule/node_modules/(およびその祖先)のみを検索します。見つかりません。代わりに、ノードが/local/myproject/node_modules/を検索するようにします。これは、プロジェクトが実行された場所であり、fooがインストールされている場所だからです。

したがって、ノードにnotを指示する方法が必要です。fooを探すときにこのシンボリックリンクを解決するか、npmにcopyをインストールするように指示する方法が必要です。 mymodulepackage.jsonでファイル依存構文が使用されている場合。残念ながら、どちらの方法も見つけられませんでした:(

7
Paul Medynski