与在构建服务器上使用 node/npm 相关的路径大小问题
Path size issues related to working with node/npm on a build server
我有一个构建服务器,可以构建和部署到我们的持续集成 (CI) 环境,并自动部署到开发、暂存、实时 - 全部通过 TFS 构建定义。
在构建服务器上,我需要通过随 Dust 下载的实用程序 (dustc) 编译 Dust 模板(在部署步骤之前)。当我在Visual Studio中运行时,启动Visual Studio(VS)时将Dust下载到文件夹node_modules中,但通常不会签入该文件夹(否则许多具有版本的客户端库很快会导致管理开销)
Dust 通过 npm 下载(我使用的是 v3.5.2)。据我了解,使用npm下载模块的标准下载方式如下:-
- 本地(在 VS 中)通过 NuGet 下载 npm,这会在项目的根目录 (".bin") 中生成一个文件夹,其中包含包含在项目中并已签入的 npm.cmd
- 然后,在下载 solution/project 工件后在构建服务器上,然后下载 NuGet 包(包括 npm)
最后,提交以下命令(在这种情况下,我在 VS post-build 任务中有它,但只要它是在下载 NuGet 包之后就可以了)
cd "$(ProjectDir)"
call "$(ProjectDir)\.bin\npm.cmd" install dustjs-linkedin --save-dev
最终结果'should' 将 Dust 下载到项目结构中(在 node_modules 文件夹中),然后我可以发出命令来编译 Dust 模板
然而,问题是当通过 NuGet 下载 npm 时,npm 文件夹结构是大量嵌套的,因此超出了 Windows 路径 260 个字符的限制 (https://github.com/nodejs/node-v0.x-archive/issues/6960) - 因此构建甚至失败在工作有机会 运行 npm 下载 Dust 之前(注意:我已经减少了 TFS 文件夹的长度,但是 npm 为构建名称、项目等的任何划分留下了很小的空间 - 例如.. ./packages/Npm.3.5.2/node_modules/npm/node_modules/npm-install-checks/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/readable-stream/node_modules/core-util-is/lib 大约是 170 个字符)
我读过 Node npm windows file paths are too long to install packages,其中建议使用版本 3.x,或使用 npm-flatten/dedupe - 但我仍然遇到问题 - 主要是因为 NuGet 步骤失败- 在它能够使用 npm
做任何事情之前
一个解决方案可能是只选择需要的文件(即从 npm 或可能更容易 [但不太灵活] 只是 Dust 文件 [dustc 等])并包含在源代码管理中而不包含 npm NuGet。但这很麻烦 - 如果我签入的文件已更新(通常如此),我必须确保所有文件都完好无损并且 运行s
有没有更简洁的方法?
即使路径长度限制真的很烦人,最有效和最简单的方法仍然是花一些时间调整您的 file/folder 结构 以使其工作。
例如:而不是\xx\Build\Drop\ProjectName
,只需使用\xx\Build\Drop
(或\xx\Builds
) 因为项目名称也在构建名称中。
TFS中的长路径问题,之前有相关用户反馈,现已完成。
Fix 260 character file name length limitation
We’ve removed the limitation from the BCL for the basic file
manipulation functionality (CRUD). You can find more details here:
https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/
Immo Landwerth Program Manager .NET
参考这些步骤并检查结果:
- 安装 Node.js 到您的构建服务器
- 将 npm 配置文件添加到您的项目 (package.json) 并签入
- 打开您的构建定义
- 添加 npm 步骤
- 队列构建
我有一个构建服务器,可以构建和部署到我们的持续集成 (CI) 环境,并自动部署到开发、暂存、实时 - 全部通过 TFS 构建定义。
在构建服务器上,我需要通过随 Dust 下载的实用程序 (dustc) 编译 Dust 模板(在部署步骤之前)。当我在Visual Studio中运行时,启动Visual Studio(VS)时将Dust下载到文件夹node_modules中,但通常不会签入该文件夹(否则许多具有版本的客户端库很快会导致管理开销)
Dust 通过 npm 下载(我使用的是 v3.5.2)。据我了解,使用npm下载模块的标准下载方式如下:-
- 本地(在 VS 中)通过 NuGet 下载 npm,这会在项目的根目录 (".bin") 中生成一个文件夹,其中包含包含在项目中并已签入的 npm.cmd
- 然后,在下载 solution/project 工件后在构建服务器上,然后下载 NuGet 包(包括 npm)
最后,提交以下命令(在这种情况下,我在 VS post-build 任务中有它,但只要它是在下载 NuGet 包之后就可以了)
cd "$(ProjectDir)" call "$(ProjectDir)\.bin\npm.cmd" install dustjs-linkedin --save-dev
最终结果'should' 将 Dust 下载到项目结构中(在 node_modules 文件夹中),然后我可以发出命令来编译 Dust 模板
然而,问题是当通过 NuGet 下载 npm 时,npm 文件夹结构是大量嵌套的,因此超出了 Windows 路径 260 个字符的限制 (https://github.com/nodejs/node-v0.x-archive/issues/6960) - 因此构建甚至失败在工作有机会 运行 npm 下载 Dust 之前(注意:我已经减少了 TFS 文件夹的长度,但是 npm 为构建名称、项目等的任何划分留下了很小的空间 - 例如.. ./packages/Npm.3.5.2/node_modules/npm/node_modules/npm-install-checks/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/readable-stream/node_modules/core-util-is/lib 大约是 170 个字符)
我读过 Node npm windows file paths are too long to install packages,其中建议使用版本 3.x,或使用 npm-flatten/dedupe - 但我仍然遇到问题 - 主要是因为 NuGet 步骤失败- 在它能够使用 npm
做任何事情之前一个解决方案可能是只选择需要的文件(即从 npm 或可能更容易 [但不太灵活] 只是 Dust 文件 [dustc 等])并包含在源代码管理中而不包含 npm NuGet。但这很麻烦 - 如果我签入的文件已更新(通常如此),我必须确保所有文件都完好无损并且 运行s
有没有更简洁的方法?
即使路径长度限制真的很烦人,最有效和最简单的方法仍然是花一些时间调整您的 file/folder 结构 以使其工作。
例如:而不是\xx\Build\Drop\ProjectName
,只需使用\xx\Build\Drop
(或\xx\Builds
) 因为项目名称也在构建名称中。
TFS中的长路径问题,之前有相关用户反馈,现已完成。
Fix 260 character file name length limitation
We’ve removed the limitation from the BCL for the basic file manipulation functionality (CRUD). You can find more details here:
https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/
Immo Landwerth Program Manager .NET
参考这些步骤并检查结果:
- 安装 Node.js 到您的构建服务器
- 将 npm 配置文件添加到您的项目 (package.json) 并签入
- 打开您的构建定义
- 添加 npm 步骤
- 队列构建