node.js - Hur man fixar "Syntaxfel - Stöd för den experimentella syntaxen 'decorators-legacy' är för närvarande inte aktiverad" utan babel


Jag skapade ett testprojekt här: https://github.com/baleksandr48/babel-question

Kort sagt: Jag skapade en NextJS-applikation och vill använda filer i pages/* för att rendera sidor, och filen pages/api/[...catchAll].ts för att hantera andra förfrågningar. Jag bestämde mig för att lägga till NestJS - det gör att jag kan dela hela koden i moduler.

Vad är problemet: NestJS använder dekoratörer och när jag klickar på knappen "hämta data" får jag ett fel:

Syntaxfel - Stöd för den experimentella syntaxen 'decorators-legacy' är för närvarande inte aktiverad

Jag googlade lite och löste detta problem genom att lägga till en .babelrc-fil:

{
  "presets": ["next/babel"],
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }]
  ]
}

Men jag undrar frågan: kan jag lösa det utan Babel? När jag tar bort .babelrc-filen och kör kommandot ts-node backend/main.ts fungerar min applikation utan fel.

Varför? Har jag rätt att när jag kör backend separat så transpilerar jag typescript till es5 (som jag har satt i tsconfig.json) och node fungerar bra med es5. Men när jag kör appen med npm run dev, vad händer då?

  • Har inte koden transpilerats till ES5?
  • är inte allt som jag har i pages/api bara exekverat på serversidan via node, men inte via webbläsaren?
  • om koden har körts i webbläsaren, fungerar inte webbläsaren bra med es5?

Vänligen beskriv för mig vad skillnaden är mellan att initiera backend-appen genom npm run dev och ts-node backend/main.ts ?