与在构建服务器上使用 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下载模块的标准下载方式如下:-

最终结果'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

参考这些步骤并检查结果:

  1. 安装 Node.js 到您的构建服务器
  2. 将 npm 配置文件添加到您的项目 (package.json) 并签入
  3. 打开您的构建定义
  4. 添加 npm 步骤
  5. 队列构建