私は npm version にアップグレードしましたが、最も大きな変更の1つは フラットな依存関係ツリー を強制することです。
これで、依存関係は最大限にフラットにインストールされます。可能な限り、すべての依存関係とその依存関係、およびそれらの依存関係は、ネストせずにプロジェクトの
node_modules
フォルダーにインストールされます。 2つ(またはそれ以上)のモジュールが競合する依存関係を持っている場合にのみ、モジュールが互いにネストされて表示されます。
したがって、たとえば、パッケージ[〜#〜] a [〜#〜]がパッケージに依存している場合[〜# 〜] b [〜#〜]、npm install A
を実行すると、次のファイル構造が得られます。
--- root/
|--- node_modules/
|--- A/
|--- B/
バージョン2以下の古いファイル構造の代わりに:
--- root/
|--- node_modules/
|--- A/
|--- node_modules/
|--- B/
私が遭遇した最初の(そして私は最後ではないと確信しています)問題はこれでした:
パッケージ[〜#〜] a [〜#〜]はnpm v3の動作を認識せず、パッケージに依存しています[〜#〜] b [〜#〜]。ただし、[〜#〜] a [〜#〜]は、コードにnode_modules/B
があるため、古い(v2)ファイル構造を想定しています。適切な../node_modules/B
の代わりに。 [〜#〜] a [〜#〜]のコードは、間違ったディレクトリでB/
を探しているため、コンパイルされません。 。
開発者にコードの修正を強要し、[〜#〜] a [〜#〜]の更新を待つのが嫌な場合は、 npmを強制的にインストールするオプションを設定する方法があるのだろうか[〜#〜] a [〜#〜]内部の依存関係独自のnode_modules
フォルダ。npmv2が行っていたのと同じ方法。
やってみました --legacy-bundling
ために npm install
?
https://docs.npmjs.com/cli/install
--legacy-bundling引数を指定すると、npmはパッケージをインストールするため、ノード0.8に含まれているものなど、1.4より前のバージョンのnpmがパッケージをインストールできます。これにより、すべての自動重複除外が排除されます。
これは私が十分な睡眠をとらない場合に何が起こるかです。明白な解決策はどういうわけか私を逃れた。
$ cd node_modules/A/
$ npm install
$ cd ../../
私はこの問題に遭遇し、この問題を修正する代替案を見つけました。 Node.jsにはNPMが付属しているため、私が考えることができる唯一の方法は、Node.js 0.10バージョンにダウングレードすることでした。これには、古い方法で依存関係をインストールするNPMの古いバージョンが付属しています。ダウングレードするために [〜#〜] nvm [〜#〜] を使用し、nvm use 0.10.0
を実行しました。このトリックに従うことで、npmバージョンを切り替えることができます。それが役に立てば幸い!