-

在MSBuild里使用编译选项

概述

编译选项可以在使用MSBuild的项目里通过MSBuild属性指定。

例子

<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
  <TypeScriptRemoveComments>false</TypeScriptRemoveComments>
  <TypeScriptSourceMap>true</TypeScriptSourceMap>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
  <TypeScriptRemoveComments>true</TypeScriptRemoveComments>
  <TypeScriptSourceMap>false</TypeScriptSourceMap>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets"
        Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets')" />

映射

编译选项MSBuild属性名称可用值
--declarationTypeScriptGeneratesDeclarations布尔值
--moduleTypeScriptModuleKindAMDCommonJsUMD 或 System
--targetTypeScriptTargetES3ES5, or ES6
--charsetTypeScriptCharset 
--emitBOMTypeScriptEmitBOM布尔值
--emitDecoratorMetadataTypeScriptEmitDecoratorMetadata布尔值
--experimentalDecoratorsTypeScriptExperimentalDecorators布尔值
--inlineSourceMapTypeScriptInlineSourceMap布尔值
--inlineSourcesTypeScriptInlineSources布尔值
--locale自动的自动设置成PreferredUILang的值
--mapRootTypeScriptMapRoot文件路径
--newLineTypeScriptNewLineCRLF 或 LF
--noEmitOnErrorTypeScriptNoEmitOnError布尔值
--noEmitHelpersTypeScriptNoEmitHelpers布尔值
--noImplicitAnyTypeScriptNoImplicitAny布尔值
--noUnusedLocalsTypeScriptNoUnusedLocals布尔值
--noUnusedParametersTypeScriptNoUnusedParameters布尔值
--noLibTypeScriptNoLib布尔值
--noResolveTypeScriptNoResolve布尔值
--outTypeScriptOutFile文件路径
--outDirTypeScriptOutDir文件路径
--preserveConstEnumsTypeScriptPreserveConstEnums布尔值
--removeCommentsTypeScriptRemoveComments布尔值
--rootDirTypeScriptRootDir文件路径
--isolatedModulesTypeScriptIsolatedModules布尔值
--sourceMapTypeScriptSourceMap文件路径
--sourceRootTypeScriptSourceRoot文件路径
--strictNullChecksTypeScriptStrictNullChecks布尔值
--suppressImplicitAnyIndexErrorsTypeScriptSuppressImplicitAnyIndexErrors布尔值
--suppressExcessPropertyErrorsTypeScriptSuppressExcessPropertyErrors布尔值
--moduleResolutionTypeScriptModuleResolutionClassic or Node
--experimentalAsyncFunctionsTypeScriptExperimentalAsyncFunctions布尔值
--jsxTypeScriptJSXEmitReact or Preserve
--reactNamespaceTypeScriptReactNamespacestring
--skipDefaultLibCheckTypeScriptSkipDefaultLibCheck布尔值
--allowUnusedLabelsTypeScriptAllowUnusedLabels布尔值
--noImplicitReturnsTypeScriptNoImplicitReturns布尔值
--noFallthroughCasesInSwitchTypeScriptNoFallthroughCasesInSwitch布尔值
--allowUnreachableCodeTypeScriptAllowUnreachableCode布尔值
--forceConsistentCasingInFileNamesTypeScriptForceConsistentCasingInFileNames布尔值
--allowSyntheticDefaultImportsTypeScriptAllowSyntheticDefaultImports布尔值
--noImplicitUseStrictTypeScriptNoImplicitUseStrict布尔值
--projectVS不支持 
--watchVS不支持 
--diagnosticsVS不支持 
--listFilesVS不支持 
--noEmitVS不支持 
--allowJsVS不支持 
VS特有选项TypeScriptAdditionalFlags任意编译选项

我使用的Visual Studio版本里支持哪些选项?

查找 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets文件。 可用的MSBuild XML标签与相应的tsc编译选项的映射都在那里。

ToolsVersion

工程文件里的<TypeScriptToolsVersion>1.7</TypeScriptToolsVersion>属性值表明了构建时使用的编译器的版本号(这个例子里是1.7) 这样就允许一个工程在不同的机器上使用固定的版本去编译。

如果没有指定TypeScriptToolsVersion,则会使用机器上安装的最新版本的编译器去构建。

如果用户使用的是更新版本的TypeScript,则会在首次加载工程的时候看到一个提示升级工程的对话框。

TypeScriptCompileBlocked

如果你使用其它的构建工具(比如,gulp, grunt等等)并且使用VS做为开发和调试工具,那么在工程里设置<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>。 这样VS只会提供给你编辑的功能,而不会在你按F5的时候去构建。