NPM 包未嵌套在最新节点的 Visual Studio 中
NPM packages not nesting in Visual Studio with latest Node
启动标准 ASP.Net 5 Web 应用程序并添加 npm 包后,VS2015 已停止嵌套它们。即使只有一个简单的包,例如 'del',我也看到 -
我确定它应该只显示主包,其依赖项嵌套在它下面。 VS 现在在所有项目中都这样做,而它们过去是整齐嵌套的。添加两个或三个包最终会产生一个庞大且难以管理的无关包列表。
如果我在命令提示符下 运行 npm list
,输出表明所有包都整齐地嵌套在 del 下。我试过 npm prune
和 npm cache clean
但没有成功。 NPM 报告节点的版本 5.4.0 和本身的 3.5.4,如果相关的话。
我想让它按应有的方式运行!
编辑 - 它似乎只有在您将默认 Node.js 更改为更新版本时才会发生。 VS2015 Update 1 的默认设置似乎是 NPM 1.4.9,Node 0.10.31。仍然没有帮助。我怀疑如果不更新 Visual Studio,这将无法解决,但可能有一个巧妙的解决方法。
这是设计使然,因为新版本的节点默认不再嵌套 NPM 包。之所以改变这一点,是因为旧设计经常导致 MAX_PATH 问题,其中嵌套项目会创建路径长度,很容易超过 Windows.
的 256 个字符限制。
我知道您喜欢从演示的角度来看嵌套,但从可靠性的角度来看,这是一个巨大的改进。 Windows 上的 NPM 用户一直遇到这个问题。
编辑 - 这是答案。
这个问题的核心是 npm3 已经决定扁平化模块目录,主要是由于 Windows 应用程序使用不支持的旧 API 的问题长文件路径。
长文件路径似乎不是 VS 的问题。由于 npm2 仍在积极维护中,如果你想避免噩梦嵌套,你应该使用 npm2 分支。
但是,更新 node.js 会安装最新的 npm3 分支。要将您的 npm 带回 2 分支,您应该 运行 Powershell 作为管理员,并且 运行
npm install -g npm@2.14.14
重启VS。如果你已经有一个扁平目录,然后打开你的 node_modules
文件夹并删除所有内容,然后从 VS GUI 恢复包。然后你应该回到一个可行的结构。
(这确实是对迈克尔的回复,但我需要post一张我不能在评论中做的图片。)
感谢您阐明立场。如果我指出为什么我认为这是一个非常有问题的立场,我希望你不会介意。
首先,标准的npm包集是完全合理的
"gulp": "3.8.11",
"gulp-concat": "2.5.2",
"gulp-cssmin": "0.1.7",
"gulp-uglify": "1.2.0",
"rimraf": "2.2.8"
这是生成的包列表:
我想您马上就会明白这是多么不可行。
其次,无法卸载软件包。
第三,有一些嵌套,但为什么以及如何有点神秘。
推论将列出在 DNX 下安装的每个 ASP.Net 包 - 字面上会有数百个,而且同样不可行。
我不完全理解字符限制问题,但在我看来更像是一个 GUI 问题。再次感谢。
启动标准 ASP.Net 5 Web 应用程序并添加 npm 包后,VS2015 已停止嵌套它们。即使只有一个简单的包,例如 'del',我也看到 -
我确定它应该只显示主包,其依赖项嵌套在它下面。 VS 现在在所有项目中都这样做,而它们过去是整齐嵌套的。添加两个或三个包最终会产生一个庞大且难以管理的无关包列表。
如果我在命令提示符下 运行 npm list
,输出表明所有包都整齐地嵌套在 del 下。我试过 npm prune
和 npm cache clean
但没有成功。 NPM 报告节点的版本 5.4.0 和本身的 3.5.4,如果相关的话。
我想让它按应有的方式运行!
编辑 - 它似乎只有在您将默认 Node.js 更改为更新版本时才会发生。 VS2015 Update 1 的默认设置似乎是 NPM 1.4.9,Node 0.10.31。仍然没有帮助。我怀疑如果不更新 Visual Studio,这将无法解决,但可能有一个巧妙的解决方法。
这是设计使然,因为新版本的节点默认不再嵌套 NPM 包。之所以改变这一点,是因为旧设计经常导致 MAX_PATH 问题,其中嵌套项目会创建路径长度,很容易超过 Windows.
的 256 个字符限制。我知道您喜欢从演示的角度来看嵌套,但从可靠性的角度来看,这是一个巨大的改进。 Windows 上的 NPM 用户一直遇到这个问题。
编辑 - 这是答案。
这个问题的核心是 npm3 已经决定扁平化模块目录,主要是由于 Windows 应用程序使用不支持的旧 API 的问题长文件路径。
长文件路径似乎不是 VS 的问题。由于 npm2 仍在积极维护中,如果你想避免噩梦嵌套,你应该使用 npm2 分支。
但是,更新 node.js 会安装最新的 npm3 分支。要将您的 npm 带回 2 分支,您应该 运行 Powershell 作为管理员,并且 运行
npm install -g npm@2.14.14
重启VS。如果你已经有一个扁平目录,然后打开你的 node_modules
文件夹并删除所有内容,然后从 VS GUI 恢复包。然后你应该回到一个可行的结构。
(这确实是对迈克尔的回复,但我需要post一张我不能在评论中做的图片。)
感谢您阐明立场。如果我指出为什么我认为这是一个非常有问题的立场,我希望你不会介意。
首先,标准的npm包集是完全合理的
"gulp": "3.8.11",
"gulp-concat": "2.5.2",
"gulp-cssmin": "0.1.7",
"gulp-uglify": "1.2.0",
"rimraf": "2.2.8"
这是生成的包列表:
我想您马上就会明白这是多么不可行。
其次,无法卸载软件包。
第三,有一些嵌套,但为什么以及如何有点神秘。
推论将列出在 DNX 下安装的每个 ASP.Net 包 - 字面上会有数百个,而且同样不可行。
我不完全理解字符限制问题,但在我看来更像是一个 GUI 问题。再次感谢。