【发布时间】:2021-11-04 12:23:26
【问题描述】:
我对 typescript 有点陌生,我在别人的现有存储库的一个分支中工作,试图针对它运行测试。
总结
我已经编写了一个测试脚本examples/test.ts 并尝试使用 vscode 调试器对其进行调试。当我使用ts-node ./examples/test.ts 运行脚本时,脚本执行成功。然而,当我尝试使用 vscode 调试器运行它时,我得到了著名的SyntaxError: Cannot use import statement outside a module。此错误发生在我的 typescript 测试的第 1 行,我首先尝试import {Foo} from '../dist',其中Foo 是被测对象。
尝试修复
我已经研究了一段时间,the most common fix 因为这似乎是在tsconfig.json compilerOptions 中将module 设置为commonjs。但是,这个项目已经正确设置了。
Another common fix 是在package.json 中设置"type":"module",但是当我这样做时,我会在 vscode 调试器中导致新的错误。具体来说,Uncaught TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /path/truncated/by/me/examples/test.ts。可以在调试器之外正常运行脚本的事实让我觉得更有可能是tsconfig.json或者类似的配置,当然我可能错了。
相关配置文件:
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}/examples/test.ts",
"preLaunchTask": "tsc: build - tsconfig.json",
"outFiles": [
"${workspaceFolder}/dist/**/*.js"
]
}
]
}
tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"lib": ["es2015", "dom"],
"allowJs": true,
"skipLibCheck": true,
"sourceMap": true,
"outDir": "dist",
"strict": true,
"noImplicitAny": true,
"moduleResolution": "node",
"baseUrl": "./",
"esModuleInterop": true
},
"include": ["*"],
"exclude": ["node_modules"]
}
版本
在最新的 macOS 上运行 VSCode 1.52.1。 ts-node --version 给出v9.1.1,项目使用node --version 的v12.14.1。
【问题讨论】:
标签: node.js typescript visual-studio-code vscode-debugger tsconfig