MSBuild构建TypeScript项目:JS文件条件追加文本方案问询
解决方案
这里是修改后的MSBuild脚本,完全满足你的需求——给指定OurBundle项添加条件属性,动态追加外部文件内容到最终的JS包中:
<!-- 定义带条件属性的OurBundle项 --> <OurBundle Include="SomeFile.ts" AddDetails="true" DetailsFile="path/to/your-details-file.js" /> <OurBundle Include="SomeOtherFile.ts" /> <!-- 其他OurBundle项... --> <Target Name="AfterBuild"> <!-- 步骤1:读取所有OurBundle文件的基础内容 --> <ReadLinesFromFile File="%(OurBundle.Identity)"> <Output TaskParameter="Lines" ItemName="baseJsLines" /> </ReadLinesFromFile> <!-- 步骤2:筛选出需要追加细节的项,读取对应外部文件内容 --> <ReadLinesFromFile File="%(OurBundle.DetailsFile)" Condition="'%(OurBundle.AddDetails)' == 'true'"> <Output TaskParameter="Lines" ItemName="detailLines" /> </ReadLinesFromFile> <!-- 步骤3:合并基础内容和细节内容,写入最终文件 --> <WriteLinesToFile File="scriptbundle.js" Lines="@(baseJsLines);@(detailLines)" Overwrite="true" /> </Target>
关键细节说明:
- 条件属性标记:给需要追加内容的
OurBundle项添加AddDetails="true",同时用DetailsFile指定要追加的外部文件路径(你可以根据实际需求调整这个属性名或路径规则) - 条件筛选:在
ReadLinesFromFile任务中使用Condition="'%(OurBundle.AddDetails)' == 'true'",只处理标记了需要追加细节的项 - 内容合并:通过
@(baseJsLines);@(detailLines)把基础代码和追加的细节内容合并,顺序可以根据你的需求调整(比如把细节放在基础内容前面的话,调换顺序即可)
如果你希望细节内容和对应源文件的内容紧密关联(而不是所有细节都放在最后),可以改用逐文件处理的方式:
<Target Name="AfterBuild"> <!-- 清空临时内容集合 --> <CreateItem Include=""> <Output TaskParameter="Include" ItemName="finalJsLines" /> </CreateItem> <!-- 遍历每个OurBundle项,逐文件处理 --> <ReadLinesFromFile File="%(OurBundle.Identity)"> <Output TaskParameter="Lines" ItemName="currentFileLines" /> </ReadLinesFromFile> <!-- 条件追加细节内容 --> <ReadLinesFromFile File="%(OurBundle.DetailsFile)" Condition="'%(OurBundle.AddDetails)' == 'true'"> <Output TaskParameter="Lines" ItemName="currentFileLines" /> </ReadLinesFromFile> <!-- 合并到最终集合 --> <CreateItem Include="@(finalJsLines);@(currentFileLines)"> <Output TaskParameter="Include" ItemName="finalJsLines" /> </CreateItem> <!-- 写入最终文件 --> <WriteLinesToFile File="scriptbundle.js" Lines="@(finalJsLines)" Overwrite="true" /> </Target>
这个版本会把每个标记了AddDetails="true"的文件内容和对应的细节内容放在一起,再按顺序合并所有文件的内容。
内容的提问来源于stack exchange,提问作者Mavi Domates
相关产品推荐
相关产品推荐

