“npm install”在node_modules目录中安装所有依赖项,而不是嵌套它们

时间:2015-10-15 17:26:14

标签: node.js laravel npm

我需要知道以下行为是否正常。

当我npm install,来自 package.json 的每个包和依赖项时,不再安装嵌套,但每个依赖项都安装在node_modules目录。这使我的node_modules目录爆炸,看起来像这样:

Screenshot of node_modules directory

这是因为我更新了npm和node。

现在我跑:

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个子目录的文章。

2 个答案:

答案 0 :(得分:61)

更新:正如Erik Pukinskis在评论中提到的那样: 从npm 3.5开始,对--legacy-bundling的支持已被删除。

是的,有一种方法可以通过更改npm(编写本文时的第3版)默认行为来再次拥有嵌套目录:

  1. 删除当前存在的node_modules文件夹。

  2. 告诉npm使用旧版捆绑安装这一次安装:

    npm install --legacy-bundling

  3. “永久”替代方案:

    1. 将您的npm配置设置为始终使用旧版捆绑...

      npm set legacy-bundling=true

    2. ..并照常运行:

      npm install

    3. 注意:使用旧版捆绑获取依赖项将花费更多时间,因为将安装相同依赖项的多个不同版本。

      免责声明:作为非Windows用户,我不需要平面依赖关系,并希望轻松找到自我声明的依赖关系,以支持自动重复数据删除。由于在没有旧版捆绑的情况下安装npm依赖项已经花了不可思议的时间,我通常愿意花费额外的安装时间。它在Laravel Elixir设置中从之前的700+(...)返回到5个目录,其中包含bootstrap(非sass),font-awesome和jquery。

答案 1 :(得分:35)

根据this npm blognpm 3行为。