Angular 2 应用程序的 TFS 构建失败(TypeScript 错误),但一切都在本地构建良好

Posted

技术标签:

【中文标题】Angular 2 应用程序的 TFS 构建失败(TypeScript 错误),但一切都在本地构建良好【英文标题】:TFS Build fails for Angular 2 application (TypeScript errors), but everything builds fine locally 【发布时间】:2017-01-03 09:12:18 【问题描述】:

我正在使用安装了 Update 3 的 Visual Studio 2015。我有一个包含用 TypeScript 编写的 Angular 2 应用程序的解决方案。这个应用程序是按照 Angular 自己的“5 分钟快速入门”指南添加到解决方案中的:https://angular.io/guide/quickstart

Angular 应用程序甚至还没有完成,实际上它才刚刚开始开发。 Angular 2 项目的所有配置文件都直接取自该指南,没有被修改过。

该解决方案在我的本地计算机上构建得很好。但是,当我进行 TFS 签入以启动构建时,解决方案无法在远程构建服务器上构建。

我在 MSBuild 步骤中遇到以下错误,它们都与 TypeScript 相关:

错误 TS2307:构建:找不到模块“@angular/core”。 错误 TS1219:构建:对装饰器的实验性支持是一项可能在未来版本中更改的功能。指定“--experimentalDecorators”以删除此警告 错误 TS2315:构建:类型“任何”不是通用的。 错误 TS1148:构建:除非提供“--module”标志,否则无法编译模块 错误 TS2304:构建:找不到名称“它”。

这些错误中的大多数都会重复多次,指向 angular 2 应用程序的各个部分。总共有29个错误。

有趣的是,构建日志中的每一个错误都后面跟着对包含 Angular 应用程序的 .csproj 文件的引用。

据我了解,TypeScript 文件应该基于 tsconfig.json 文件中定义的配置属性进行编译,而不是 Visual Studio 项目的属性。事实上,当我在本地打开解决方案并尝试从 Visual Studio 中的属性修改 TypeScript 配置时,它告诉我这些属性由于存在 tsconfig.json 文件而被禁用。

同样,一切都在本地构建良好,零错误。它只是无法在远程构建服务器上构建。

那么这里有人有什么想法吗?远程构建服务器是否可能不是最新的,因此没有读取我的 tsconfig.json 文件?

为了彻底,这是我的 tsconfig.json 文件...


"compilerOptions": 
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true
,
"compileOnSave": true

编辑

更新:好的,我想我正在缩小这个问题的范围。似乎在 TFS 构建上我的 tsconfig.json 肯定没有被读取。

这是我在本地运行 MSBuild 时的日志...

PreComputeCompileTypeScriptWithTSConfig:
  C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.8\tsc.exe --project "C:\[MY PATH GOES HERE]\tsconfig.json" 
CompileTypeScriptWithTSConfig:
  C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.8\tsc.exe --project "C:\[My PATH GOES HERE]\tsconfig.json"

但这是远程 TFS 构建上发生的事情......

        PreComputeCompileTypeScript:
          C:\Program Files (x86)\Microsoft  SDKs\TypeScript\1.5\tsc.exe  --sourcemap --target ES5 --noEmitOnError COMPUTE_PATHS_ONLY 
        CompileTypeScript:
          C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.5\tsc.exe  --sourcemap --target ES5 --noEmitOnError 

所以...我的构建服务器使用的是 TypeScript 1.5,而我在本地使用的是 1.8。当然 1.8 是在 Visual Studio 中引入对 tsconfig.json 的改进支持的时候。希望我所要做的就是让某人更新 TFS 服务器上的 TypeScript。

【问题讨论】:

你的问题解决了吗? @squadwuschel 是的,请参阅原始问题底部的编辑。构建服务器没有安装 Visual Studio Update 3,这就是为您提供 TypeScript 1.8 并在构建时支持 .tsconfig 文件的原因。更新构建服务器解决了这个问题。 【参考方案1】:

您最好确保您的构建服务器(构建代理)上的环境与您本地的环境相同。这将大大降低构建失败的风险。

在您的情况下,尝试将 TypeScript 1.5 更新到版本 1.8 并再次排队构建。如果还是不行,您可以尝试在构建代理(机器)上手动构建,而不是通过 tfs,以缩小与代理环境或 TFS 构建定义设置相关的问题。

【讨论】:

是的,这正是我们正在努力解决的问题,也是我发布编辑的原因。 TFS 构建服务器未运行 Visual Studio Update 3,此时添加了 TypeScript 1.8 并支持 tsconfig.json。因此,在我们的 TFS 服务器上安装更新 3 之前,TypeScript 将不会在构建时正确转译。我们应该在今天推出更新 3,我也许终于能够解决这个问题。

以上是关于Angular 2 应用程序的 TFS 构建失败(TypeScript 错误),但一切都在本地构建良好的主要内容,如果未能解决你的问题,请参考以下文章

TFS:构建 React 项目失败

WiX 构建在 TFS 中失败但在本地工作

如何基于Fortify扫描结果使TFS构建失败

TFS 单元测试在开发机器上通过但在构建机器上失败

尝试将变更集与构建关联后,TFS构建失败

TFS 构建错误:Web 部署任务失败。包文件没有 .zip 文件扩展名