Parcel использует tsconfig.json не как инструмент
компиляции в классическом смысле, а как источник семантической
информации о проекте TypeScript. Фактическая трансформация кода
выполняется собственными трансформерами Parcel (встроенные трансформеры,
SWC или Babel в зависимости от конфигурации), тогда как
tsconfig.json влияет на:
Ключевой принцип: Parcel не делегирует полную компиляцию
tsc, но читает конфигурацию для согласования семантики
проекта.
Раздел compilerOptions оказывает основное влияние на то,
как Parcel интерпретирует исходный TypeScript-код.
Определяет уровень ECMAScript-выхода:
{
"compilerOptions": {
"target": "ES2020"
}
}
В Parcel значение target используется как ориентир
для:
Важно: Parcel может переопределять фактический transpile target на
основе browserslist, но target остаётся базовым
ограничением.
{
"compilerOptions": {
"module": "ESNext"
}
}
В Parcel это влияет на:
При CommonJS Parcel вынужден добавлять дополнительные
обёртки, ухудшая оптимизацию графа модулей.
Наиболее критичный параметр для резолвинга:
{
"compilerOptions": {
"moduleResolution": "node"
}
}
Parcel поддерживает расширенное поведение:
node — классический Node.js алгоритм;bundler (в новых версиях TS) — упрощённый алгоритм,
ориентированный на сборщики.При bundler уменьшается количество неоднозначных
резолвов, ускоряется граф зависимостей.
Механизм алиасов:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@app/*": ["src/app/*"]
}
}
}
Parcel использует эти настройки через TypeScript resolver:
Ключевая особенность: Parcel должен синхронизировать алиасы между TypeScript и собственным resolver-слоем. Несоответствие приводит к:
{
"compilerOptions": {
"strict": true
}
}
Parcel напрямую не использует strict-режим для трансформации, но:
Флаги под strict:
Эти параметры не меняют output JavaScript, но влияют на качество проверки.
{
"compilerOptions": {
"jsx": "react-jsx"
}
}
Parcel учитывает JSX-конфигурацию при трансформации:
react → классический JSX transform;react-jsx → автоматический runtime (React 17+);preserve → передача JSX дальше по пайплайну.Также важны:
jsxImportSource (для React-like runtime);reactNamespace (редкий кейс кастомных JSX
runtime).Parcel выбирает соответствующий transform pipeline (Babel/SWC), синхронизируя его с TypeScript-ожиданиями.
{
"compilerOptions": {
"esModuleInterop": true
}
}
Этот параметр влияет на:
Parcel использует это для:
{
"compilerOptions": {
"isolatedModules": true
}
}
Критично для Parcel, поскольку он компилирует модули по одному.
При включении:
Parcel фактически предполагает isolatedModules: true как
безопасную модель сборки.
{
"compilerOptions": {
"sourceMap": true
}
}
Parcel использует это для:
Однако финальное поведение sourcemaps контролируется Parcel, а не TypeScript напрямую.
{
"compilerOptions": {
"noEmit": true
}
}
Классическая настройка при использовании Parcel:
tsc output и bundler
output.{
"include": ["src"],
"exclude": ["dist", "node_modules"]
}
Parcel использует эти параметры для:
Особенности:
include влияет только на discovery entry points;node_modules исключается автоматически, но может быть
переопределён.{
"references": [
{ "path": "../shared" }
]
}
Parcel частично учитывает project references:
Однако Parcel не использует full TypeScript project graph как
tsc --build, а строит собственный граф поверх
TS-конфигурации.
Ключевые расхождения:
| Область | tsc | Parcel |
|---|---|---|
| Компиляция | полная | частичная |
| Типы | обязательны | опциональны |
| Output | управляется tsc | управляется Parcel |
| Aliases | только проверка | runtime + build resolution |
| JSX | через TS | через Babel/SWC |
Parcel строит кеш на основе:
Изменения в:
compilerOptionspathsbaseUrlмогут приводить к инвалидированию кеша всего графа.
Особенно чувствительны:
Hot Module Replacement зависит от:
Ошибки конфигурации tsconfig могут приводить к:
Наиболее критичные параметры:
baseUrl / paths;module;jsx;moduleResolution.Parcel может получать конкурирующие настройки из:
При конфликте приоритет обычно следующий:
Типичный конфликт:
module: CommonJSРезультат: деградация оптимизации и увеличение bundle size.
Ключевые согласованные установки:
"module": "ESNext""target": "ES2020" или выше"moduleResolution": "bundler" (при поддержке)"isolatedModules": true"noEmit": true"jsx": "react-jsx" (для React проектов)Эта конфигурация минимизирует расхождения между TypeScript-моделью и сборочным графом Parcel.
В проектах с несколькими tsconfig:
Типичная структура:
tsconfig.json
tsconfig.base.json
tsconfig.app.json
tsconfig.lib.json
Parcel интерпретирует их как иерархию, но фактическое разрешение зависит от конкретного входного файла.
Некоторые плагины используют tsconfig напрямую:
Ошибки в tsconfig приводят к: