1

我有一个构建服务器,它构建并部署到我们的持续集成 (CI) 环境,并自动部署到 Development、Staging、Live——所有这些都通过 TFS Build Definitions 进行。

在构建服务器上,我需要通过随 Dust 下载的实用程序 (dustc) 编译 Dust 模板(在部署步骤之前)。在本地,当我在 Visual Studio 中运行时,当 Visual Studio (VS) 启动时会将 Dust 下载到文件夹 node_modules 中,但是通常不会签入此文件夹(否则带有版本的众多客户端库会很快导致管理开销)

Dust 是通过 npm 下载的(我使用的是 v3.5.2)。据我了解,下载使用 npm 下载的模块的标准方法如下:-

  • 在本地(在 VS 中)通过 NuGet 下载 npm,这会在项目根目录(“.bin”)中生成一个文件夹,其中包含 npm.cmd,该文件夹包含在项目中并已签入
  • 然后,在解决方案/项目工件下载后的构建服务器上,然后下载 NuGet 包(包括 npm)
  • 最后,提交以下命令(在这种情况下,我在 VS 构建后任务中有它,但只要是在下载 NuGet 包之后,一切都应该没问题)

    cd "$(ProjectDir)"
    call "$(ProjectDir)\.bin\npm.cmd" install dustjs-linkedin --save-dev
    

最终结果“应该”是 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 文件路径太长,无法安装建议使用版本 3.x 或使用 npm-flatten/dedupe 的软件包 - 但我仍然遇到问题 - 主要是因为 NuGet 步骤失败 -在能够用 npm 做任何事情之前

一个解决方案可能是只选择需要的文件(即从 npm 或可能更容易 [但不太灵活] 将只是 Dust 文件 [dustc 等])并包含在源代码控制中,而不是在 NuGet 中包含 npm。但这很麻烦-如果我签入的文件已更新(通常是这样),我必须确保所有文件仍然完好无损并运行

有没有更清洁的方法?

4

2 回答 2

1

尽管路径长度限制真的很烦人,但最有效和最简单的方法仍然是花一些时间调整文件/文件夹结构以使其工作。

例如:而不是\xx\Build\Drop\ProjectName,只需使用\xx\Build\Drop(或\xx\Builds),因为项目名称也在构建名称中。

对于 TFS 中的长路径问题,有一个相关的用户语音,现在已完成。

修复 260 个字符的文件名长度限制

我们删除了 BCL 对基本文件操作功能 (CRUD) 的限制。您可以在此处找到更多详细信息:

https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/

Immo Landwerth 项目经理 .NET

于 2017-01-02T08:40:27.993 回答
0

请参考以下步骤并检查结果:

  1. Node.js安装到您的构建服务器
  2. 将 npm 配置文件添加到您的项目(package.json)并签入
  3. 打开您的构建定义
  4. 添加 npm 步骤 在此处输入图像描述
  5. 队列构建
于 2017-01-03T03:27:54.233 回答