javascript - Kesalahan ekstensi file tidak dikenal ".ts" muncul saat mencoba menjalankan skrip ts-node


Saya mencoba menjalankan skrip yang dibuat di folder biasa dengan dua file .ts. Satu dengan skrip dan satu lagi dengan fungsi bantuan untuk menjalankannya. Saya juga mengimpor lebih banyak hal seperti axios atau form-data.

Masalahnya adalah ketika saya mencoba menjalankan skrip dengan ts-node: node script.ts, muncul kesalahan berikut:

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"

package.json saya:

{
  "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"
}

Dan tsconfig.json saya:

{
  "compilerOptions": {
    "esModuleInterop": true
  },
  "include": ["/**/*.ts"],
  "exclude": ["node_modules"]
}

Impor saya di file script.ts adalah:

import { datoManagementPrimaryEnvironment } from "./content.management";
import {
  createContent,
  uploadToCloudfare,
  getEntryFromDatoWithTheId,
  getFilters,
} from "./helpers";

dan di helpers.ts:

import { datoManagementPrimaryEnvironment } from "./content.management";
import axios from "axios";
import FormData from "form-data";
var showdown = require("showdown");

Apakah ada yang tahu apa yang saya lakukan salah? Terima kasih!

Jawaban #1

Gunakan switch --esm untuk ts-node.

Misalnya

ts-node --esm index.ts

Ini mengharuskan Anda memiliki modul yang disetel ke salah satu modul yang lebih baru (seperti nodenext atau node16) dan moduleResolution juga disetel ke metode yang lebih baru, di tsconfig Anda.

Jawaban #2

Ini yang berhasil untuk saya. Terima kasih kepada @Slava karena telah menunjukkan arah yang benar kepada saya.

Menautkan dokumentasi di sini.

Metode termudah adalah menambahkan esm: true ke file konfigurasi TypeScript Anda:

{   
  "$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   
  }, 
} 

Satu-satunya hal yang saya lewatkan adalah menambahkan "esm": true, karena saya sudah memiliki pengaturan ts-config untuk esm. Tapi jika Anda belum memiliki apa pun, mungkin berguna untuk menambahkan "$schema" dan "extends".

Saya juga perlu menambahkan "type": "module" di file package.json.

Jawaban #3

Hapus "type": "module" dari package.json Anda

Dan ubah tsconfig.json Anda menjadi:

{
  "compilerOptions": {
    "esModuleInterop": true,
    "moduleResolution": "node"
  },
  "include": ["/**/*.ts"],
  "exclude": ["node_modules"]
}

Artikel terkait