开发者问题收集

尝试运行 ts-node 脚本时出现未知文件扩展名“.ts”错误

2022-04-05
72104

我尝试运行在常规文件夹中创建的包含两个 .ts 文件的脚本。一个包含脚本,另一个包含运行脚本的辅助函数。我还导入了更多内容,例如 axios 或 form-data。

问题是,当我尝试使用 ts-node: node script.ts 运行脚本时,出现以下错误:

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

我的 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"
}

以及我的 tsconfig.json:

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

我在 script.ts 文件中导入的内容是:

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

以及在 helpers.ts 中:

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

有人知道我做错了什么吗?谢谢!

3个回答

对 ts-node 使用 --esm 开关。

例如

ts-node --esm index.ts

这要求您在 tsconfig 中将模块设置为较新的模块之一(例如 nodenextnode16 ),并将 moduleResolution 也设置为较新的方法。

Victor P
2023-01-28

这就是对我有用的方法。感谢@Slava 为我指明了正确的方向。

链接文档 此处

The easiest method is to add esm: true to your TypeScript config file:

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

我唯一缺少的是添加 "esm": true, ,因为我已经为 esm 设置了 ts-config。但如果您什么都没有,添加 "$schema""extends" 可能会有所帮助。

我还需要在 package.json 文件中添加 "type": "module"

christo8989
2023-02-19

从你的 package.json 中删除 "type": "module"

并将你的 tsconfig.json 更改为:

{
  "compilerOptions": {
    "esModuleInterop": true,
    "moduleResolution": "node"
  },
  "include": ["/**/*.ts"],
  "exclude": ["node_modules"]
}
Thomas H.
2022-04-05