next.js - NextJS: Kör ett Typescript-skript på servern
Jag har ett NextJS/Typescript-projekt där jag vill lägga till ett CLI-skript som ska bearbeta några filer på servern.
Tyvärr lyckas jag inte köra skriptet.
Exempel på skript src/cli.ts:
console.log("Hello world");
// Process files
Jag försökte köra skriptet med:
ts-node src/cli.ts
Men jag får detta felmeddelande:
src/cli.ts:1:1 - error TS1208: 'cli.ts' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module.
När jag lägger till en tom 'export {}'-sats får jag detta felmeddelande:
(node:15923) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
Såvitt jag vet är det nu inte möjligt att använda NextJS med ES-moduler.
Finns det ett annat sätt att köra skriptet i ett NextJS-projekt? Kanske behöver jag ändra webpack-konfigurationen?
Jag använder de senaste versionerna: Next 11, Typescript 4.3, Node 14.18, ts-node 10.13 med standard tsconfig.json, package.json.
Svar #1
Du kan använda TSX, som fungerar bra med NextJS, både för JavaScript och TypeScript. Ingen extra konfiguration eller något behövs.
Installera det:
yarn add -D tsx
Deklarera ditt skript i package.json:
...
"scripts": {
...
"my-cli-script": "tsx src/cli.ts"
},
Kör den:
yarn my-cli-script
Svar #2
Kör detta istället:
npx ts-node --skip-project src/cli.ts
Referens: https://github.com/TypeStrong/ts-node#tsconfig
--skip-project-flaggan kommer inte att lösa/ladda din tsconfig.json och kommer därför att ignorera "isolatedModules": true som krävs av Next.js.
Du kan också skapa en separat tsconfig-fil för ts-node och använda --project [path]-alternativet.
Ett annat sätt är att åsidosätta konfigurationen för ts-node i din tsconfig.json själv på detta sätt:
{
"extends": "ts-node/next/tsconfig.json",
"ts-node": {
"compilerOptions": {
// compilerOptions specified here will override those declared below,
// but *only* in ts-node. Useful if you want ts-node and tsc to use
// different options with a single tsconfig.json.
"isolatedModules": false
}
},
"compilerOptions": {
// typescript options here
}
}
Referens: https://github.com/TypeStrong/ts-node#via-tsconfigjson-recommended
