web-dev-qa-db-ja.com

「npm install」は、依存関係をネストするのではなく、node_modulesディレクトリにすべての依存関係をインストールします

次の動作が正常かどうかを知る必要があります。

私がnpm install、mypackage.jsonおよび依存関係からの各パッケージは、インストールされませんnestedもう、ただし、各依存関係はnode_modulesディレクトリ。それは私のnode_modulesディレクトリが吹き飛ばされ、次のようになります。

Screenshot of node_modules directory

これは、npmとノードを更新したために発生しました。

今私は実行します:

npm -v 3.3.6
node -v 4.2.1
python 2.7
windows 7
wamp

僕の package.jsonファイルは次のようになります。

{
  "private": true,
  "devDependencies": {
    "gulp": "^3.8.8"
  },
  "dependencies": {
    "laravel-elixir": "^3.0.0",
    "bootstrap-sass": "^3.0.0"
  }
}

標準laravel package.jsonファイル。

ネストされたディレクトリを再度作成する方法はありますか。100を超えるサブディレクトリを持つこのような記事は好きではないからです。

41

これは、 this npm blog によるnpm 3new動作です。

35
sagie

更新: Erik Pukinskisがコメントで述べたように:npm 3.5では、--legacy-bundlingのサポートは廃止されました。


はい、npm(この記事を書いている時点ではバージョン3)のデフォルトの動作を変更することで、ディレクトリを再びネストする方法があります。

  1. 現在存在するnode_modulesフォルダーを削除します。

  2. この1つのインストールのレガシーバンドルでインストールするようにnpmに指示します。

    npm install --legacy-bundling

「永続的な」代替手段:

  1. レガシーバンドリングを常に使用するようにnpm構成を設定します...

    npm set legacy-bundling=true

  2. ..そしていつものように実行します:

    npm install

注:レガシーバンドリングを使用した依存関係の取得には、同じ依存関係の複数の異なるバージョンがインストールされるため、はるかに時間がかかります。

免責事項: Windows以外のユーザーとして、私はフラットな依存関係を必要とせず、自動重複排除を優先して自己宣言された依存関係を簡単に見つけたいと思っています。レガシーバンドルなしでnpm依存関係をインストールするのにはすでに信じられないほどの時間がかかるので、通常はインストール時間に余分な時間を費やすつもりです。 Laravel Elixir setup with bootstrap(non-sass)、font-awesome)の以前の700+(...)から5つのディレクトリに戻ります。 jqueryが追加されました。

61
luchaos