为各种 Typescript 输入文件定制特定的输出文件

2024-02-25

我有一个使用 TypeScript 的 Web 项目,它对编译的输出文件有一些相当复杂的要求。例如,我需要将一个目录中的所有 *.ts 文件编译为一个 .js 文件,并将另一目录中的所有 *.ts 文件编译为不同的 .js 文件。 (它比这更复杂,但你明白了。)

我已经能够使用 tsc.exe 命令行、使用输入文件等来完成此工作,但我希望能够使用 MSBuild .targets 文件 - 除其他外,使用 tsc.exe命令行在持续集成服务器上的支持似乎很差,谁知道它可以位于哪里,而且当然不可能在路径中。

根据这个答案here https://stackoverflow.com/questions/15651172/typescript-compile-to-single-file-on-save,看来我应该能够使用自定义构建目标来做到这一点。因此,我创建了 Microsoft.TypeScript.targets 的自定义版本,除了默认的“CompileTypeScript”目标之外,我还创建了第二个目标“PayboardApiV10”,因此相关部分如下所示:

  <Target Name="CompileTypeScript" Condition="'$(BuildingProject)' != 'false'">
    <Message Text="Compiling TypeScript files normally" Importance="high"/>
    <VsTsc
      ToolPath="$(TscToolPath)"
      ToolExe="$(TscToolExe)"
      Configurations="$(TypeScriptBuildConfigurations)"
      FullPathsToFiles="@(TypeScriptCompile)"
      YieldDuringToolExecution="$(TscYieldDuringToolExecution)"
      OutFile="$(TypeScriptOutFile)"
      OutDir="$(TypeScriptOutDir)"
      >
      <Output TaskParameter="GeneratedJavascript" ItemName="GeneratedJavascript" />
    </VsTsc>
  </Target>

  <Target Name="PayboardApiV10" Condition="'$(BuildingProject)' != 'false'">
    <Message Text="Compiling TypeScript files for Payboard API v1.0" Importance="high"  />
    <VsTsc
      ToolPath="$(TscToolPath)"
      ToolExe="$(TscToolExe)"
      Configurations="$(TypeScriptBuildConfigurations)"
      FullPathsToFiles="@(TypeScriptCompile)"
      YieldDuringToolExecution="$(TscYieldDuringToolExecution)"
      OutFile="Payboard.js"
      OutDir="$(ProjectDir)api\v1.0\"
      >
      <Output TaskParameter="GeneratedJavascript" ItemName="GeneratedJavascript" />
    </VsTsc>
  </Target>

然后我在项目配置中为我希望由“PayboardApiV10”构建目标获取的特定文件指定了“CustomTool”,如下所示:

我应该指出,我不知道我是否正确地完成了这一点。我似乎找不到任何有关它的文档,我能找到的唯一示例就是来自该文档之前的回答 https://stackoverflow.com/questions/15651172/typescript-compile-to-single-file-on-save。更重要的是,当我运行我的构建时,all我的项目中的 TS 文件陷入第一个构建目标中,包括我为自定义工具指定“MSBuild:PayboardApiV10”的目标。 “PayboardApiV10”工具似乎从未运行,即,我从未看到消息“为 Payboard API v1.0 编译 TypeScript 文件”。

那么两个问题:

(1) 有没有更好的方法来做我想做的事情?

(2)如果这通常是正确的方法,那么我做错了什么有什么想法吗?


您要去的方向是最佳方式(保存时)。在此期间您可以使用构建后事件 http://msdn.microsoft.com/en-us/library/ke5z92ks.aspx转换打字稿。右键单击您的项目并选择属性。选择“构建事件”,然后在“构建后”区域中您可以指定命令行参数以使用 tsc.exe。

按照您要去的方向(保存时编译),我认为项目文件可能在您想要编译的每个文件上缺少以下内容:

<TypeScriptCompile Include="app.ts" />

该配置也可能缺少环境设置。

<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
    <TypeScriptTarget>ES5</TypeScriptTarget>
    <TypeScriptIncludeComments>true</TypeScriptIncludeComments>
    <TypeScriptSourceMap>true</TypeScriptSourceMap>
</PropertyGroup>

有关这两种方法的更多信息,请访问此处TypeScript 维基页面 http://typescript.codeplex.com/wikipage?title=Compile-on-Save.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为各种 Typescript 输入文件定制特定的输出文件 的相关文章

随机推荐

  • StackExchange.Redis - LockTake / LockRelease 用法

    我将 Redis 与 StackExchange Redis 一起使用 我有多个线程 它们会在某个时刻访问和编辑同一键的值 因此我需要同步数据的操作 查看可用的函数 我发现有两个函数 TakeLock 和 ReleaseLock 但是 这些
  • Apache mod 重写简单重定向

    我希望对我的网站的请求按如下方式工作 http example com http example com 理想情况下会拉出index php文件 当前默认行为 而不显示index php http example com foo php h
  • 读取和写入长时间运行的 std::process::Child

    我有一个长时间运行的子进程 我需要读取和写入大量数据 我有一个读取器线程和一个写入器线程来操纵child stdout and child stdin分别 extern crate scoped threadpool fn main run
  • 如何通过 VBA 将选择范围扩展到整个段落

    我正在使用此代码将选择范围扩展到Word文档中的整行 现在我想将选择范围扩展到整个段落 Selection Expand wdLine 尝试使用不同的 WdUnit 例如 wdParagraph Selection Expand wdPar
  • PHP - 使图像背景透明并具有容差

    所以我将三个图像设为透明并将它们相互叠加 我按照这篇文章中的示例代码进行操作 用php删除图像背景并保存透明png https stackoverflow com questions 10751227 remove image backgr
  • C++ 带有运行路径的辅助依赖解析

    我有以下问题 我正在尝试使用默认的 gnu 编译器 gcc 7 和可用的链接器版本在 Ubuntu18 上构建软件 现在我们遇到这样的情况 一个可执行文件可以链接一个共享库 该共享库又链接另一个共享库 因此 可执行文件具有次要依赖性 但次要
  • Spring异步方法集成测试失败

    我为异步休息控制器方法创建了一个集成测试 看起来像 Test public void shouldHandleRequestsAsynchronously throws Exception MvcResult mvcResult this
  • PyInstaller 但保持 .py 文件可升级

    我已经成功地将我的 PyQt4 应用程序打包为 Windows 上的 独立 应用程序 它可以工作 然而 这个应用程序可以自我升级 这是通过用通过互联网下载的新版本替换我编写的实际代码 py 文件 来完成的 我怎样才能告诉 PyInstall
  • 如何将参数传递给通过 Assembly.CreateInstance 加载的 C# 插件?

    我现在拥有的 成功加载插件 是这样的 Assembly myDLL Assembly LoadFrom my dll IMyClass myPluginObject myDLL CreateInstance MyCorp IMyClass
  • itertools.cycle().next()?

    嗯 我正在使用itertools cycle next 方法与Python 2 6 6 但现在我更新到3 2我注意到itertools cycle 对象没有方法next 我用它来循环一个字符串spin 的方法Spinner班级 所以如果我们
  • 自定义列表定义 + 自定义内容类型 = 仅显示一个表单字段?

    尝试使用功能来部署自定义字段 内容类型和列表 到目前为止 我有一个引用自定义和内置字段的内容类型 内容类型继承 Item 0x01 现在 我创建引用内容类型和字段 内置和自定义字段 的自定义列表定义 我明确设置ShowInDisplayFo
  • 如何将 Eclipse (helios) 项目移动到不同的工作区?

    首先 Eclipse 不是我的原生 IDE 我对它还算不上熟练 我在工作区中设置了一个项目 该项目实际上位于另一个客户项目的目录中 我并没有真正遵循整个工作区 项目的情况 事实上 现在我什至找不到要打开的 Eclipse 工作区文件它 我想
  • 通过 Gradle 和 Android NDK 强制 CMake 处于详细模式

    我正在使用 Gradle 和 CMake 从命令行编译 Android NDK 项目 以前 我使用 Ant 和ndk build但我正在尝试将项目完全迁移到 Gradle 和 CMake In my build gradle我有以下几行来调
  • 为什么AWS SQS这么慢?

    我一直在测试发送消息和从 SQS 队列接收消息所需的时间 平均需要 800 1200 毫秒 这似乎是一个非常长的时间 这是我的测试代码 如果我做错了什么 请告诉我 var t0 sendMessage hello function send
  • PHP sqlsrv:从函数传递资源

    PHP 5 4 14 SQL Server 2012 SQL 客户端 2012 Windows 2008 R2 我有一个函数 简化版本如下 我调用它来运行 SQL 查询 它工作正常 连接到数据库 运行查询并获取有效资源 问题是返回的资源为空
  • Spring RESTful客户端:根标签异常

    我正在尝试按照此示例使用 RestTemplate 解析 RESTFull 调用的结果http thekspace com home component content article 57 restful clients in sprin
  • C# 在面板上绘图

    我正在制定一天的时间表 并用面板代表时间段 而约会则在顶部有更多面板 用户可以上下滚动 以便他们可以看到的范围提前或推迟 当约会超出可见范围的末尾时 我希望有一个锯齿形指示约会超出了可见范围 我已经确定了发生这种情况的情况 并调用了一个私有
  • XCode 4 中的“构建后测试”选项不起作用

    所以 我花了很长时间才弄清楚这个问题 我环顾四周 似乎找不到任何这方面的信息 我想要做的是让我的单元测试始终在每次我在 XCode 中构建代码时运行 我读过很多帖子 包括这个问题 https stackoverflow com questi
  • 使用加速度计计算距离

    在阅读了许多关于如何根据加速度数据测量距离的论坛之外的研究和论文之后 我找到了双重积分方法 但是与该方法相关的误差很大 并且随着时间的推移而增加 此外 我发现一些人建议卡尔曼滤波器 我读了一些有关它的参考资料 但我不清楚如何使用它 还有一些
  • 为各种 Typescript 输入文件定制特定的输出文件

    我有一个使用 TypeScript 的 Web 项目 它对编译的输出文件有一些相当复杂的要求 例如 我需要将一个目录中的所有 ts 文件编译为一个 js 文件 并将另一目录中的所有 ts 文件编译为不同的 js 文件 它比这更复杂 但你明白