Vyhledávání na webu

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