2015-10-15 51 views
37

我需要知道以下行为是否正常。“npm install”将所有依赖关系安装在node_modules目录中,而不是将它们嵌套

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

Screenshot of node_modules directory

这种情况发生,因为我更新了新公共管理和节点。

我现在运行:

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

回答

33

这就是行为npm 3根据this npm blog

+0

谢谢sagie,我想没有办法让它再次嵌套以避免臃肿的目录,是吗? (也必须等待5分钟,然后才能接受你的答案为正确的答案) – LoveAndHappiness

+9

平坦更好,因为我看到它。作为一个windows用户,删除太多嵌套模块真的很可怕,因为它传递256个字符的速度非常快(或者是1024,不记得)。另外,当你升级模块时,我可以帮助你升级模块,因为它可以更好地重用现有的安装,并且不会替换升级的模块下的所有东西,因为它的依赖关系没有改变。底线,这种方式更快更清洁。 – sagie

+0

我一直试图解决NPM大声笑...很高兴我跑过这个或我仍然会寻找解决方案=) – afreeland

57

更新:正如埃里克Pukinskis在评论中提到: 作为NPM 3.5,为--legacy-bundling支持已被删除。


是的,有一种方法已经改变故宫的(3版作为写这篇文章)的默认行为再次嵌套目录:

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

  2. 泰尔NPM与遗留捆绑为这一个安装安装:

    npm install --legacy-bundling

A “永久的” 替代:

  • 集您的npm配置始终使用旧版捆绑...

    npm set legacy-bundling=true

  • ..和照常运行:

    npm install

  • 注:的读取与传统的捆绑依赖将花费更多的时间,因为许多几个不同的版本相同的依赖性会安装。

    声明:作为非Windows用户,我不需要平面依赖关系,并且希望轻松地找到自我声明的依赖关系,以支持自动重复数据删除。由于在没有传统捆绑的情况下安装npm依赖关系已经花费了大量时间,我通常愿意花这些额外的几分钟安装时间。在Laravel Elixir安装程序中使用bootstrap(非sass),增加了字体和jquery,它可以恢复到之前700+(...)的5个目录。

    +1

    这个答案对我来说对我的具体情况非常有用。在这里描述后代:我一直在尝试为现有节点项目构建具有依赖关系的package.json。使用'npm install <我需要的软件包列表> --legacy-bundling --save'只写入了package.json中的直接依赖项。然后我做了'rm -rf node_modules && npm install',以取回新的扁平node_modules目录。这对我来说是两全其美的。 –

    +3

    我也认为这是正确的答案,因为它直接回答OP中肯定的 –

    +2

    从npm 3.5开始,对“--legacy-bundling”的支持已经被删除。 –

    相关问题