Параметры компилятора в MSBuild
Обзор
При работе с проектом на основе MSBuild, использующим TypeScript (например, проектом ASP.NET Core), можно настроить TypeScript двумя способами. Либо через tsconfig.json , либо через настройки проекта.
Использование tsconfig.json
Рекомендуется использовать tsconfig.json для вашего проекта, когда это возможно. Чтобы добавить его в существующий проект, добавьте новый элемент в проект, который называется «Файл конфигурации TypeScript JSON» в современных версиях Visual Studio.
Новый tsconfig.json затем будет использоваться в качестве источника информации о сборке, специфичной для TypeScript, таких как файлы и настройки. Вы можете узнать о работе TSConfigs здесь, а также есть полная справка здесь.
Использование настроек проекта
Вы также можете определить конфигурацию TypeScript внутри настроек вашего проекта. Это делается путем редактирования XML в вашем .csproj для определения PropertyGroups , которые описывают, как может работать сборка:
<PropertyGroup> <TypeScriptNoEmitOnError>true</TypeScriptNoEmitOnError> <TypeScriptNoImplicitReturns>true</TypeScriptNoImplicitReturns> </PropertyGroup>
Существует ряд соответствий для общих параметров TypeScript, это параметры, которые напрямую сопоставляются с параметрами командной строки TypeScript и используются для написания более понятного файла проекта. Вы можете использовать ссылку TSConfig, чтобы получить больше информации о значениях и значениях по умолчанию для каждого соответствия.
Сопоставления параметров командной строки
| Имя конфигурации MSBuild | Флаг TSC |
|---|
<TypeScriptAllowJS> | --allowJs | |
| Разрешить использование JavaScript-файлов в вашей программе. Используйте опцию | ||
<TypeScriptRemoveComments> | --removeComments | |
| Отключить вывод комментариев. | ||
<TypeScriptNoImplicitAny> | --noImplicitAny | |
| Включить сообщение об ошибке для выражений и объявлений с неявным типом | ||
<TypeScriptGeneratesDeclarations> | --declaration | |
| Генерировать файлы .d.ts из TypeScript и JavaScript-файлов в вашем проекте. | ||
<TypeScriptModuleKind> | --module | |
| Указать, какой код модуля генерировать. | ||
<TypeScriptJSXEmit> | --jsx | |
| Указать, какой код JSX генерировать. | ||
<TypeScriptOutDir> | --outDir | |
| Указать папку вывода для всех генерируемых файлов. | ||
<TypeScriptSourceMap> | --sourcemap | |
| Создавать файлы карт исходного кода для генерируемых JavaScript-файлов. | ||
<TypeScriptTarget> | --target | |
| Установить версию языка JavaScript для генерируемого JavaScript и включить совместимые объявления библиотек. | ||
<TypeScriptNoResolve> | --noResolve | |
| Запретить расширение количества файлов, которые TypeScript должен добавить в проект, из-за | ||
<TypeScriptMapRoot> | --mapRoot | |
| Указать местоположение, где отладчик должен искать файлы карт вместо генерируемых местоположений. | ||
<TypeScriptSourceRoot> | --sourceRoot | |
| Указать корневой путь для отладчиков, чтобы найти исходный код ссылки. | ||
<TypeScriptCharset> | --charset | |
| Больше не поддерживается. В ранних версиях позволяло вручную задавать кодировку текста для чтения файлов. | ||
<TypeScriptEmitBOM> | --emitBOM | |
| Выводить метку порядка байтов (BOM) UTF-8 в начале выходных файлов. | ||
<TypeScriptNoLib> | --noLib | |
| Отключить включение файлов библиотек, включая стандартный файл lib.d.ts. | ||
<TypeScriptPreserveConstEnums> | --preserveConstEnums | |
| Отключить удаление объявлений | ||
<TypeScriptSuppressImplicitAnyIndexErrors> | --suppressImplicitAnyIndexErrors | |
| Подавить ошибки | ||
<TypeScriptNoEmitHelpers> | --noEmitHelpers | |
| Отключить генерацию пользовательских вспомогательных функций, таких как | ||
<TypeScriptInlineSourceMap> | --inlineSourceMap | |
| Включать файлы карт исходного кода внутри генерируемого JavaScript. | ||
<TypeScriptInlineSources> | --inlineSources | |
| Включать исходный код в карты исходного кода внутри генерируемого JavaScript. | ||
<TypeScriptNewLine> | --newLine | |
| Установить символ новой строки для генерируемых файлов. | ||
<TypeScriptIsolatedModules> | --isolatedModules | |
| Убедиться, что каждый файл можно безопасно транскрибировать, не полагаясь на другие импорты. | ||
<TypeScriptEmitDecoratorMetadata> | --emitDecoratorMetadata | |
| Выводить метаданные типа дизайна для объявленных декораторов в исходных файлах. | ||
<TypeScriptRootDir> | --rootDir | |
| Указать корневую папку в ваших исходных файлах. | ||
<TypeScriptExperimentalDecorators> | --experimentalDecorators | |
| Включить экспериментальную поддержку черновика декораторов TC39 стадии 2. | ||
<TypeScriptModuleResolution> | --moduleResolution | |
| Указать, как TypeScript ищет файл по заданному спецификатору модуля. | ||
<TypeScriptSuppressExcessPropertyErrors> | --suppressExcessPropertyErrors | |
| Отключить сообщения об ошибках избыточных свойств при создании литералов объектов. | ||
<TypeScriptReactNamespace> | --reactNamespace | |
| Указать объект, вызываемый для | ||
<TypeScriptSkipDefaultLibCheck> | --skipDefaultLibCheck | |
| Пропустить проверку типов файлов .d.ts, включенных в TypeScript. | ||
<TypeScriptAllowUnusedLabels> | --allowUnusedLabels | |
| Отключить вывод сообщений об ошибках для неиспользуемых меток. | ||
<TypeScriptNoImplicitReturns> | --noImplicitReturns | |
| Включить вывод сообщений об ошибках для путей кода в функции, которые не возвращают значения явно. | ||
<TypeScriptNoFallthroughCasesInSwitch> | --noFallthroughCasesInSwitch | |
| Включить вывод сообщений об ошибках для случаев fallthrough в операторах switch. | ||
<TypeScriptAllowUnreachableCode> | --allowUnreachableCode | |
| Отключить вывод сообщений об ошибках для недостижимого кода. | ||
<TypeScriptForceConsistentCasingInFileNames> | --forceConsistentCasingInFileNames | |
| Убедиться, что регистр в импортах корректный. | ||
<TypeScriptAllowSyntheticDefaultImports> | --allowSyntheticDefaultImports | |
| Разрешить 'import x from y', когда модуль не имеет экспорта по умолчанию. | ||
<TypeScriptNoImplicitUseStrict> | --noImplicitUseStrict | |
| Отключить добавление директив 'use strict' в генерируемые JavaScript-файлы. | ||
<TypeScriptLib> | --lib | |
| Указать набор объединенных файлов объявлений библиотек, которые описывают целевую среду выполнения. | ||
<TypeScriptBaseUrl> | --baseUrl | |
| Указать базовый каталог для разрешения имён модулей, не являющихся относительными. | ||
<TypeScriptDeclarationDir> | --declarationDir | |
| Указать папку вывода для сгенерированных файлов объявлений. | ||
<TypeScriptNoImplicitThis> | --noImplicitThis | |
| Включить сообщение об ошибке, когда | ||
<TypeScriptSkipLibCheck> | --skipLibCheck | |
| Пропустить проверку типов всех файлов .d.ts. | ||
<TypeScriptStrictNullChecks> | --strictNullChecks | |
| При проверке типов учитывать | ||
<TypeScriptNoUnusedLocals> | --noUnusedLocals | |
| Включить вывод сообщений об ошибках, когда локальные переменные не считываются. | ||
<TypeScriptNoUnusedParameters> | --noUnusedParameters | |
| Выводить ошибку, когда параметр функции не считывается. | ||
<TypeScriptAlwaysStrict> | --alwaysStrict | |
| Убедиться, что 'use strict' всегда генерируется. | ||
<TypeScriptImportHelpers> | --importHelpers | |
| Разрешить импорт вспомогательных функций из tslib один раз на проект, вместо включения их для каждого файла. | ||
<TypeScriptJSXFactory> | --jsxFactory | |
| Укажите функцию-фабрику JSX, используемую при целевом выводе React JSX, например, 'React.createElement' или 'h' | ||
<TypeScriptStripInternal> | --stripInternal | |
| Отключить вывод объявлений, содержащих | ||
<TypeScriptCheckJs> | --checkJs | |
| Включить отчет об ошибках в файлах JavaScript с проверкой типов. | ||
<TypeScriptDownlevelIteration> | --downlevelIteration | |
| Выводить более совместимый, но подробный и менее производительный JavaScript для итерации. | ||
<TypeScriptStrict> | --strict | |
| Включить все параметры строгой проверки типов. | ||
<TypeScriptNoStrictGenericChecks> | --noStrictGenericChecks | |
| Отключить строгую проверку общих сигнатур в типах функций. | ||
<TypeScriptPreserveSymlinks> | --preserveSymlinks | |
| Отключить разрешение символических ссылок на их реальный путь. Это соответствует тому же флагу в node. | ||
<TypeScriptStrictFunctionTypes> | --strictFunctionTypes | |
| При присваивании функций проверяйте, совместимы ли параметры и возвращаемые значения с подтипами. | ||
<TypeScriptStrictPropertyInitialization> | --strictPropertyInitialization | |
| Проверять свойства класса, которые объявлены, но не установлены в конструкторе. | ||
<TypeScriptESModuleInterop> | --esModuleInterop | |
| Выводить дополнительный JavaScript для облегчения поддержки импорта модулей CommonJS. Это позволяет | ||
<TypeScriptEmitDeclarationOnly> | --emitDeclarationOnly | |
| Выводить только файлы d.ts, а не файлы JavaScript. | ||
<TypeScriptKeyofStringsOnly> | --keyofStringsOnly | |
| Сделать keyof возвращающим только строки, вместо строк, чисел или символов. Старый параметр. | ||
<TypeScriptUseDefineForClassFields> | --useDefineForClassFields | |
| Выводить поля классов, совместимые со стандартом ECMAScript. | ||
<TypeScriptDeclarationMap> | --declarationMap | |
| Создавать sourcemap для файлов d.ts. | ||
<TypeScriptResolveJsonModule> | --resolveJsonModule | |
| Включить импорт файлов .json | ||
<TypeScriptStrictBindCallApply> | --strictBindCallApply | |
| Проверить, что аргументы для методов | ||
<TypeScriptNoEmitOnError> | --noEmitOnError | |
| Отключить вывод файлов, если обнаружены ошибки проверки типов. | ||
Дополнительные флаги
Поскольку система MSBuild передает аргументы напрямую в командную строку TypeScript, вы можете использовать параметр TypeScriptAdditionalFlags для предоставления специфических флагов, которые не имеют соответствия выше.
Например, это включит noPropertyAccessFromIndexSignature:
<TypeScriptAdditionalFlags> $(TypeScriptAdditionalFlags) --noPropertyAccessFromIndexSignature</TypeScriptAdditionalFlags>
Debug и Release сборки
Вы можете использовать условия PropertyGroup для определения различных наборов конфигураций. Например, распространённая задача — удаление комментариев и sourcemap в производственной сборке. В этом примере мы определяем группы свойств debug и release, которые имеют различные конфигурации TypeScript:
<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')" /> ToolsVersion
Значение свойства <TypeScriptToolsVersion>1.7</TypeScriptToolsVersion> в файле проекта определяет версию компилятора, используемую для сборки (1.7 в этом примере). Это позволяет проекту строиться на основе одних и тех же версий компилятора на разных машинах.
Если TypeScriptToolsVersion не указано, для сборки будет использоваться последняя версия компилятора, установленная на компьютере.
Пользователи, использующие более новые версии TS, увидят запрос на обновление проекта при первом запуске.
TypeScriptCompileBlocked
Если вы используете другой инструмент сборки для сборки своего проекта (например, gulp, grunt и т.д.) и VS для разработки и отладки, установите <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked> в вашем проекте. Это должно предоставить всю поддержку редактирования, но не сборку при нажатии F5.
TypeScriptEnableIncrementalMSBuild (TypeScript 4.2 Beta и новее)
По умолчанию MSBuild попытается запустить компилятор TypeScript только тогда, когда исходные файлы проекта были обновлены с момента последней компиляции. Однако, если это поведение вызывает проблемы, такие как при включенном параметре TypeScript incremental, установите <TypeScriptEnableIncrementalMSBuild>false</TypeScriptEnableIncrementalMSBuild> для обеспечения запуска компилятора TypeScript при каждом запуске MSBuild.
© 2012-2023 Microsoft
Licensed under the Apache License, Version 2.0.
https://www.typescriptlang.org/docs/handbook/compiler-options-in-msbuild.html