Emi*_*ano 36 javascript typescript ts-node
我正在尝试运行在常规文件夹中创建的带有两个 .ts 文件的脚本。一份包含脚本,一份包含运行脚本的辅助函数。我还导入了更多东西,例如 axios 或表单数据。
问题是,当我尝试使用 ts-node: node script.ts运行脚本时,出现以下错误:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"
Run Code Online (Sandbox Code Playgroud)
我的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"
}
Run Code Online (Sandbox Code Playgroud)
还有我的 tsconfig.json:
{
"compilerOptions": {
"esModuleInterop": true
},
"include": ["/**/*.ts"],
"exclude": ["node_modules"]
}
Run Code Online (Sandbox Code Playgroud)
我在 script.ts 文件中的导入是:
import { datoManagementPrimaryEnvironment } from "./content.management";
import {
createContent,
uploadToCloudfare,
getEntryFromDatoWithTheId,
getFilters,
} from "./helpers";
Run Code Online (Sandbox Code Playgroud)
在 helpers.ts 中:
import { datoManagementPrimaryEnvironment } from "./content.management";
import axios from "axios";
import FormData from "form-data";
var showdown = require("showdown");
Run Code Online (Sandbox Code Playgroud)
有谁知道我做错了什么?谢谢!
Vic*_*r P 24
使用--esmts-node 的开关。
例如
ts-node --esm index.ts
Run Code Online (Sandbox Code Playgroud)
这要求您在 tsconfig.json 中将模块设置为较新的模块之一(例如nodenext或),并且 moduleResolution 也设置为较新的方法。node16
chr*_*989 12
这对我有用。感谢@Slava 为我指明了正确的方向。
\n在此处链接文档。
\n\n\n最简单的方法是将 esm: true 添加到您的 TypeScript 配置文件中:
\nRun Code Online (Sandbox Code Playgroud)\n{ \n "$schema": "https://json.schemastore.org/tsconfig", \n "extends": "@tsconfig/node-lts-strictest-esm/tsconfig.json", \n "compilerOptions": {\n // \xe2\x80\xa6 \n }, \n "include": [\n // \xe2\x80\xa6 \n ], \n "ts-node": {\n "esm": true, // \xc2\xab\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94 enabling ESM for ts-node \n }, \n} \n
我唯一缺少的是添加,"esm": true,因为我已经有 esm 的 ts-config 设置。"$schema"但如果您什么都没有,添加和可能会有所帮助"extends"。
我还需要添加"type": "module"package.json 文件。
"type": "module"从 package.json 中删除
并将您的更改tsconfig.json为:
{
"compilerOptions": {
"esModuleInterop": true,
"moduleResolution": "node"
},
"include": ["/**/*.ts"],
"exclude": ["node_modules"]
}
Run Code Online (Sandbox Code Playgroud)
package.json以具有:{\n "type": "module",\n // \xe2\x80\xa6\n}\nRun Code Online (Sandbox Code Playgroud)\n@tsconfig/node-lts-strictest-esm依赖项:{\n "type": "module",\n // \xe2\x80\xa6\n}\nRun Code Online (Sandbox Code Playgroud)\ntsconfig.json以具有:{\n "$schema": "https://json.schemastore.org/tsconfig",\n "extends": "@tsconfig/node-lts-strictest-esm/tsconfig.json",\n // \xe2\x80\xa6\n}\nRun Code Online (Sandbox Code Playgroud)\n.js在 TS 源文件中使用带扩展名的导入,例如:import { Foo } from \'./common/foo.js\';\nRun Code Online (Sandbox Code Playgroud)\nts-node-esm file.ts命令代替ts-node file.ts.这应该可以解决问题。
\n另外,请查看详细指南。
\n| 归档时间: |
|
| 查看次数: |
59629 次 |
| 最近记录: |