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

Lov*_*ess 41 node.js npm laravel

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

当我npm install,每包从我的package.json和依赖,不要安装嵌套了,但每个依赖安装在node_modules目录中.这使得我的node_modules目录被烧毁,看起来像这样:

node_modules目录的屏幕截图

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

现在我跑:

npm -v 3.3.6
node -v 4.2.1
python 2.7
windows 7
wamp
Run Code Online (Sandbox Code Playgroud)

我的package.json文件看起来像这样:

{
  "private": true,
  "devDependencies": {
    "gulp": "^3.8.8"
  },
  "dependencies": {
    "laravel-elixir": "^3.0.0",
    "bootstrap-sass": "^3.0.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

这是标准的laravel package.json文件.

有没有办法再次使用嵌套目录,因为我不喜欢这样一篇包含超过100个子目录的文章.

luc*_*aos 61

更新:正如Erik Pukinskis在评论中提到的那样:截至下午3点,支持--legacy-bundling率已经下降.


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

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

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

    npm install --legacy-bundling

"永久"替代方案:

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

    npm set legacy-bundling=true

  2. ..并像往常一样运行:

    npm install

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

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

  • 我也认为这是正确的答案,因为它直接回答了肯定的OP (3认同)
  • 对于我的具体情况,这个答案对我非常有用。在这里为后代描述:我一直在尝试使用现有节点项目的依赖项构建 package.json。使用 `npm install <list of packages I require> --legacy-bundling --save` 仅将直接依赖项写入 package.json。然后我做了 `rm -rf node_modules && npm install`,以取回新的平面 node_modules 目录。这对我来说是两全其美的。 (2认同)
  • 从npm 3.5开始,对`--legacy-bundling`的支持已被删除. (2认同)

sag*_*gie 35

这是根据这个npm博客的新行为.npm 3

  • 我认为平板更好.作为一个Windows用户,删除太多的嵌套模块真是太可怕了,因为它真的很快地通过256个最大字符(或者它是1024,不记得了).此外,我在升级模块时也会提供帮助,因为它现在可以更好地重用现有安装,而不是替换升级模块下的所有内容,因为它的依赖关系可能没有改变.底线,这种方式更快更清洁. (9认同)