2015-10-24 11 views
16

私はちょうどnpm version 3にアップグレードしました。最も大きな変更の1つは、flat dependency treeを強制することです。どのようにnpm 3にネストされた依存関係を強制的にインストールできますか?

依存関係は最大限にフラットにインストールされます。可能な限り、すべての依存関係とその依存関係、およびその依存関係は、プロジェクトのnode_modulesフォルダーに入れ子なしでインストールされます。 2つ(またはそれ以上)のモジュールが矛盾する依存関係を持つ場合には、モジュールは互いに重なり合うようにネストされます。例えばので

あなたはこのファイル構造を取得しますnpm install A時にパッケージは、パッケージBに依存している場合:

--- root/ 
|--- node_modules/ 
    |--- A/ 
    |--- B/ 

代わりに古いファイル構造のバージョン2または下から:

--- root/ 
|--- node_modules/ 
    |--- A/ 
    |--- node_modules/ 
     |--- B/ 

最初の(と私は最後ではないと確信している)私はに走った問題は、このでした:

パッケージはnpm v3の動作を認識せず、パッケージBに依存しています。しかし、は、適切な../node_modules/Bではなく、コードにnode_modules/Bがあるため、古い(v2)ファイル構造を前提としています。 のコードは、間違ったディレクトリにB/を探しているのでコンパイルされません。私は、コードを修正するために、開発者をしつこいとの更新を待っているような気がしない場合は

、私は年代をインストールするために、私は、NPMを強制するオプションを設定することができる方法があるのか​​しら独自のnode_modulesフォルダ内の依存関係は、npm v2と同じ方法で行いました。

答えて

20

--legacy-bundlingnpm installにしようとしましたか?

https://docs.npmjs.com/cli/install

--legacy-束ね引数は、ノード0.8に含まれているものと前1.4 NPMのバージョンは、パッケージをインストールすることができるようにパッケージをインストールするNPMを引き起こすであろう。これにより、すべての自動除算が排除されます。

1

これは十分な睡眠を取らないと起こります。明白な解決策が何とか私を逃れました。

$ cd node_modules/A/ 
$ npm install 
$ cd ../../ 
+1

私は同じ問題を抱えていました。この問題を解決するには、cd node_modules/A && npm install'、cd node_modules/A/node_modules/B && npm install'など...私が理解したところから、すべてのパッケージはnpm 3.0で動作する前に依存関係を処理する新しい方法に従わなければなりません。 – Gabin

+0

@ガビン私が知っている限り、あなたは正しいです。依存関係を悪夢にアップグレードする。 – chharvey

0

私はこの問題に直面して、この問題を解決する方法を見つけました。 Node.jsにはNPMが付属しているので、NPMの古いバージョンであるNode.js 0.10バージョンにダウングレードするだけで、旧式の方法で依存関係をインストールできます。ダウングレードするにはNVMを使用し、nvm use 0.10.0を実行しました。このテクニックに従うことで、npmバージョン間を行き来することができます。それが役に立てば幸い!

+0

私はこれを試して、それが動作するかどうかを確認します。また、あなたの声明「NPMにNode.jsが付属しています」が偽であると思います。それは別の方法です。ノードにはnpmがインストールされています。 – chharvey

+0

うん。私はただそれを修正した。ありがとう! – Diego

+0

ありがとうございます。文句はちょっと混乱していたと思う。 「npmにノードが付いてくる」と言うと、* npmにnode *がインストールされているということです。つまり、npmをインストールするとノードが自動的に取得されます(正しくありません)。 * npmがノード*とともにインストールされます。つまり、ノードをインストールすると、npm(正しい)のコピーが得られます。英語はばかです。 – chharvey