Kompilace Typescriptu nic nedělá
Stavím REST-API s Express v Typescript a zažívám divné chování od Typescript-kompilátoru. Když projekt postavím pomocí tsc -b lokálně na mém počítači s Windows 10, všechno se zkompiluje v pořádku, ale když spustím stejný příkaz na úplně stejném projektu na instanci Amazon EC2, nic se neděje. Nevidím žádné chyby a konzole prostě nic nedělá, dokud nevystoupím pomocí CTRL+C. A ne, nejsem jen netrpělivý, nechat to běžet několik minut také nemá žádný efekt. Stává se to ještě podivnější, když jsem schopen kompilovat jednotlivé soubory v kořenovém adresáři projektu spuštěním tsc index.ts, ale pouze pokud jsou umístěny v kořenové složce. Můj tsconfig vypadá takto:
{
"compilerOptions": {
"lib": [
"es5",
"es6"
],
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"outDir": "./build",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true,
"esModuleInterop": true
}
}
a struktura souborů mého projektu je:
package.json
package-lock.json
tsconfig.json
src/
app.ts
index.ts
routes/
entity/
Moje verze npm je: 7.8.0 (na instanci Amazon EC2)
Moje verze TypeScriptu je: 4.2.4 (na instanci Amazon EC2)
Odpověď č. 1
Po dalším vyšetřování jsem zjistil, že tento problém vznikl kvůli poměrně omezené paměti, kterou EC2 instance má. Příkaz node používá příliš mnoho paměti a tím se počítač zablokoval. Začal jsem více zkoumat a vlastně existuje příznak pro node, který umožňuje omezit jeho využití RAM (node v8.0+), našel jsem ho zde.
TL;DR: Kompilace Typescriptu zabírala příliš mnoho paměti, a jako řešení můžete omezit množství RAM, které může proces node využít:
npx --max-old-space-size=250 tsc -b
