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 错误),但一切都在本地构建良好的主要内容,如果未能解决你的问题,请参考以下文章