javascript - Eroare de extensie necunoscută a fișierului ".ts" apare atunci când încercați să rulați un script ts-node
Încerc să rulez un script creat într-un folder obișnuit cu două fișiere .ts. Unul cu scriptul și unul cu funcții auxiliare pentru a-l rula. De asemenea, import mai multe lucruri, cum ar fi axios sau form-data.
Problema este că atunci când încerc să rulez scriptul cu ts-node: node script.ts, apare următoarea eroare:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"
Fișierul meu package.json:
{
"dependencies": {
"@types/node": "^17.0.23",
"axios": "^0.26.1",
"form-data": "^4.0.0",
"showdown": "^2.0.3",
"ts-node": "^10.7.0",
"typescript": "^4.6.3"
},
"type": "module"
}
Și tsconfig.json-ul meu:
{
"compilerOptions": {
"esModuleInterop": true
},
"include": ["/**/*.ts"],
"exclude": ["node_modules"]
}
Importurile mele din fișierul script.ts sunt:
import { datoManagementPrimaryEnvironment } from "./content.management";
import {
createContent,
uploadToCloudfare,
getEntryFromDatoWithTheId,
getFilters,
} from "./helpers";
și în helpers.ts:
import { datoManagementPrimaryEnvironment } from "./content.management";
import axios from "axios";
import FormData from "form-data";
var showdown = require("showdown");
Știe cineva ce greșesc? Mulțumesc!
Răspuns #1
Folosește comutatorul --esm pentru ts-node.
Ex
ts-node --esm index.ts
Acest lucru necesită să aveți modulul setat la unul dintre cele mai noi (cum ar fi nodenext sau node16) și moduleResolution, de asemenea, setat la o metodă mai nouă, în tsconfig-ul dumneavoastră.
Răspunsul #2
Acesta este ceea ce a funcționat pentru mine. Mulțumesc lui @Slava pentru că m-a îndreptat în direcția corectă.
Legând documentația aici.
Cea mai simplă metodă este să adaugi esm: true în fișierul tău de configurare TypeScript:
{ "$schema": "https://json.schemastore.org/tsconfig", "extends": "@tsconfig/node-lts-strictest-esm/tsconfig.json", "compilerOptions": { // … }, "include": [ // … ], "ts-node": { "esm": true, // «———— enabling ESM for ts-node }, }
Singurul lucru care îmi lipsea era să adaug "esm": true, pentru că deja am configurat ts-config pentru esm. Dar dacă nu ai nimic, probabil că este util să adaugi "$schema" și "extends".
De asemenea, a trebuit să adaug "type": "module" în fișierul package.json.
Răspunsul #3
Eliminați "type": "module" din package.json
Și schimbă fișierul tău tsconfig.json în:
{
"compilerOptions": {
"esModuleInterop": true,
"moduleResolution": "node"
},
"include": ["/**/*.ts"],
"exclude": ["node_modules"]
}
