javascript - Tuntematon tiedostopääte ".ts" virhe ilmestyy yrittäessä suorittaa ts-node-skriptiä
Yritän suorittaa skriptiä, joka on luotu tavalliseen kansioon, jossa on kaksi .ts-tiedostoa. Yksi sisältää skriptin ja toinen apufunktioita sen suorittamiseen. Tuon myös muita asioita, kuten axiosia tai form-dataa.
Asia on se, että kun yritän suorittaa skriptin ts-nodella: node script.ts, seuraava virhe ilmestyy:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"
Minun package.json-tiedostoni:
{
"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"
}
Ja minun tsconfig.json-tiedostoni:
{
"compilerOptions": {
"esModuleInterop": true
},
"include": ["/**/*.ts"],
"exclude": ["node_modules"]
}
Tuontini script.ts-tiedostossa ovat:
import { datoManagementPrimaryEnvironment } from "./content.management";
import {
createContent,
uploadToCloudfare,
getEntryFromDatoWithTheId,
getFilters,
} from "./helpers";
ja tiedostossa helpers.ts:
import { datoManagementPrimaryEnvironment } from "./content.management";
import axios from "axios";
import FormData from "form-data";
var showdown = require("showdown");
Tietääkö kukaan, mitä teen väärin? Kiitos!
Vastaus #1
Käytä --esm-kytkintä ts-nodea varten.
Esim.
ts-node --esm index.ts
Tämä vaatii, että sinulla on moduuli asetettuna yhteen uudemmista (kuten nodenext tai node16) ja moduleResolution asetettuna myös uudempaan menetelmään tsconfigissasi.
Vastaus #2
Tämä toimi minulle. Kiitos @Slava, että ohjasit minut oikeaan suuntaan.
Liitän dokumentaation tähän.
Helpoin tapa on lisätä esm: true TypeScriptin konfiguraatiotiedostoosi:
{ "$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 }, }
Ainoa asia, joka puuttui, oli "esm": true, lisääminen, koska minulla on jo ts-konfiguraatio asetettu esm:lle. Mutta jos sinulla ei ole mitään, on luultavasti hyödyllistä lisätä "$schema" ja "extends".
Minun piti myös lisätä "type": "module" package.json-tiedostoon.
Vastaus #3
Poista "type": "module" package.json-tiedostostasi
Ja muuta tsconfig.json-tiedostosi seuraavasti:
{
"compilerOptions": {
"esModuleInterop": true,
"moduleResolution": "node"
},
"include": ["/**/*.ts"],
"exclude": ["node_modules"]
}
