尝试运行 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 中将模块设置为较新的模块之一(例如
nodenext
或
node16
),并将 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