我需要知道以下行为是否正常。
当我npm install
,来自 package.json 的每个包和依赖项时,不再安装嵌套,但每个依赖项都安装在node_modules
目录。这使我的node_modules
目录爆炸,看起来像这样:
这是因为我更新了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个子目录的文章。
答案 0 :(得分:61)
更新:正如Erik Pukinskis在评论中提到的那样:
从npm 3.5开始,对--legacy-bundling
的支持已被删除。
是的,有一种方法可以通过更改npm(编写本文时的第3版)默认行为来再次拥有嵌套目录:
删除当前存在的node_modules
文件夹。
告诉npm使用旧版捆绑安装这一次安装:
npm install --legacy-bundling
“永久”替代方案:
将您的npm配置设置为始终使用旧版捆绑...
npm set legacy-bundling=true
..并照常运行:
npm install
注意:使用旧版捆绑获取依赖项将花费更多时间,因为将安装相同依赖项的多个不同版本。
免责声明:作为非Windows用户,我不需要平面依赖关系,并希望轻松找到自我声明的依赖关系,以支持自动重复数据删除。由于在没有旧版捆绑的情况下安装npm依赖项已经花了不可思议的时间,我通常愿意花费额外的安装时间。它在Laravel Elixir设置中从之前的700+(...)返回到5个目录,其中包含bootstrap(非sass),font-awesome和jquery。
答案 1 :(得分:35)
根据this npm blog,npm 3
的新行为。