Jakie są optymalne tsconfig
ustawienia TypeScript do generowania kodu, który zostanie uruchomiony na Node.js 12?
źródło
Jakie są optymalne tsconfig
ustawienia TypeScript do generowania kodu, który zostanie uruchomiony na Node.js 12?
Począwszy od Node.js 12.0.0
, obsługiwane jest 100% ES2019. Jeśli wiesz, że celujesz w tę wersję lub nowszą, optymalna konfiguracja wygląda następująco:
"module": "commonjs"
Node.js jest w trakcie dodawania modułów ES, ale na razie będziemy musieli trzymać się CommonJS.
"target": "es2019"
Mówi to TypeScript, że można wypisywać składnię JavaScript z funkcjami z ES2019. W praktyce oznacza to, że będzie np. Wyprowadzał właściwości rest / spread obiektu wyjściowego i asynchronizował / czekał na składnię zamiast osadzania wypełnienia.
"lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"]
Mówi to TypeScript, że można używać funkcji i właściwości wprowadzonych w ES2019 lub wcześniejszej wersji. W praktyce oznacza to, że można użyć np String.prototype.trimStart
i Array.prototype.flat
.
Oprócz ES2019, Node.js 12 obsługuje również BigInt
i matchAll
z ES2020, dlatego dołączamy dodatkowe definicje z ES2020.
Pełna konfiguracja wyglądałaby zatem tak:
{
"compilerOptions": {
"lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"],
"module": "commonjs",
"target": "es2019"
}
}
Jeśli celujesz w Node.js 12.9.0
lub nowszy , możesz po prostu określić, "lib": ["es2020"]
że ta wersja obsługuje wszystkie nowe funkcje i właściwości wprowadzone w ES2020. Jednak nie obsługuje nowej składni JavaScript , więc nadal musisz być włączony "target": "es2019"
.
Pełna konfiguracja wyglądałaby zatem tak:
{
"compilerOptions": {
"lib": ["es2020"],
"module": "commonjs",
"target": "es2019"
}
}
Jeśli korzystasz z Node.js 14, możesz zobaczyć moją podobną odpowiedź dla Node.js 14 tutaj
Jeśli korzystasz z Node.js 10, możesz zobaczyć moją podobną odpowiedź na Node.js 10 tutaj
Jeśli korzystasz z Node.js 8, możesz zobaczyć moją podobną odpowiedź dla Node.js 8 tutaj
"target"
wpływa"lib"
w żaden sposób, jeżeli"lib"
jest pozostawiony pusty w config? Jeśli mam tylko to,"target": "es2020"
co"lib"
domyślnie? To zawsze było dla mnie źródłem tajemnicy.