NPM包未在Visual Studio中嵌套最新的Node

时间:2016-01-11 13:26:23

标签: npm visual-studio-2015 package-managers

启动标准ASP.Net 5 Web应用程序并添加npm软件包后,VS2015已停止嵌套它们。即使有一个简单的包,例如' del',我看到 -

enter image description here

我确定它应该只展示主程序包,其依赖项嵌套在它下面。 VS现在正在所有项目中执行此操作,而过去它们整齐地嵌套。添加两个或三个软件包最终会产生巨大且无法管理的无关软件包列表。

如果我从命令提示符运行npm list,则输出指示嵌套在del下面的所有包。我已经尝试npm prunenpm cache clean,但没有成功。 NPM报告节点的版本5.4.0,以及其自身的3.5.4,如果相关的话。

我希望让它按照应有的方式行事!

编辑 - 只有将默认Node.js更改为更新版本时才会出现这种情况。 VS2015 Update 1的默认值似乎是NPM 1.4.9,节点0.10.31。尽管如此,仍然没有帮助。我怀疑如果没有Visual Studio的更新,这将无法解决,但可能有一个聪明的方法。

2 个答案:

答案 0 :(得分:2)

这是设计使然,因为新版本的节点默认不再嵌套NPM包。改变这个原因的原因是旧的设计经常导致MAX_PATH问题,嵌套项目会创建路径长度,在Windows上轻松传递256个字符的限制。

我知道你喜欢从演示的角度来看嵌套,但从可靠性的角度来看,这是一个巨大的进步。 Windows上的NPM用户一直遇到这个问题。

答案 1 :(得分:1)

编辑 - 这是答案。

此问题的核心是 npm3 已决定压缩模块目录,主要是因为使用不支持长文件路径的旧API的Windows应用程序出现问题。

长文件路径似乎不是VS的问题。由于 npm2 仍在积极维护,因此如果您想避免恶梦嵌套,则应使用 npm2 分支。

但是,更新node.js会安装最新的npm3分支。要将您的npm带回2分支,您应该以管理员身份运行Powershell,然后运行

npm install -g npm@2.14.14

重启VS.如果您已经有一个扁平目录,则打开node_modules文件夹并删除所有内容,然后从VS GUI恢复包。然后你应该回到可行的结构。

(这实际上是对Michael的回复,但我需要发布一张我无法在评论中做的图片。)

感谢您澄清立场。如果我指出为什么我认为这是一个非常有问题的立场,我希望你不会介意。

首先,标准的npm包是完全合理的 "gulp": "3.8.11", "gulp-concat": "2.5.2", "gulp-cssmin": "0.1.7", "gulp-uglify": "1.2.0", "rimraf": "2.2.8"

这是生成的包列表:

List of flattened npm packages

我认为你可以直接看到这是不可行的。

其次,卸载软件包变得不可能。

第三,有一些嵌套,但是为什么以及如何有点神秘。

推论将列出在DNX下安装的每个ASP.Net软件包 - 实际上会有数百个,并且同样不可行。

我不完全理解字符限制问题,但在我看来,它更像是一个GUI问题。再次感谢。