Я пытаюсь использовать отладчик VS Code с моим новым проектом Typescript. Я новичок как с отладчиком, так и с Typescript, так что это не облегчает задачу. Мне удалось запустить отладчик, но он только отлаживает index.ts, а модули игнорируются.
Так как мой проект имеет Typescript + Babel 7, необходимо перенести мой источник в ./dist/
перед запуском отладчика.
Я настроил следующий скрипт:
// package.json
"scripts": {
"build:js": "babel src --out-dir dist --extensions \".ts,.js\" --copy-files --source-maps",
},
Вот мой конфиг Babel
// babel.config.js
module.exports = {
presets: [
"@babel/env",
"@babel/typescript",
],
plugins: [
"transform-dynamic-import",
"@babel/proposal-class-properties",
"@babel/proposal-object-rest-spread",
[
"module-resolver",
{
alias: {
"@": "./src",
},
},
],
],
};
И мой конфиг Typescript:
// tsconfig.json
{
"compilerOptions": {
"target": "ESNEXT",
"module": "commonjs",
"allowJs": true,
"noEmit": true,
"strict": true,
"noImplicitAny": true,
"moduleResolution": "node",
"baseUrl": "./",
"paths": {
"@/*": [
"./src/*"
]
},
"preserveSymlinks": false,
"experimentalDecorators": true,
},
"include": [
"src"
],
"exclude": [
"node_modules"
]
}
В моей папке ./src/
есть 2 файла index.ts
и module.ts
.
Их содержание - базовый JavaScript, ничего особенного:
// index.js
require("./module.js")();
let n = 0;
for (let i = 0; i < 3; i++) {
n = n + 1; //there is a breakpoint on this line
console.log(String(n)); //there is a breakpoint on this line
}
// module.js
module.exports = function() {
let n = 0;
for (let i = 0; i < 3; i++) {
n = 10 - i; //there is a breakpoint on this line
console.log(n); //there is a breakpoint on this line
}
return n;
};
Я поместил 4 точки останова в коде. 2 на каждый файл.
Этот код работает по назначению и последовательно выводит 10, 9, 8, 1, 2 и 3 на консоль.
Для отладки кода я настроил отладчик кода VS следующим образом:
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug TypeScript in Node.js",
"preLaunchTask": "npm: build:js",
"program": "${workspaceFolder}/src/index.ts",
"cwd": "${workspaceFolder}",
"protocol": "inspector",
"outFiles": [
"${workspaceFolder}/dist/**/*.*"
],
"sourceMaps": true
}
]
Когда я запускаю эту конфигурацию в отладчике, учитываются только точки останова в index.ts.
Точки останова в module.ts становятся серыми кругами с подсказкой Unverified breakpoint
.
Согласно документации VSCode это означает следующее:
Если исходная карта не существует для исходного источника или если исходная карта
сломан и не может успешно отобразить между источником и
сгенерированный JavaScript, затем точки останова отображаются как непроверенные (серый
полые круги). Источник
Я так понимаю, что отладчик неправильно работает с моими исходными картами, но я понятия не имею, что об этом думать.
Я посмотрел в своей папке ./dist/
, и файлы .map были созданы, и их содержимое выглядит хорошо для меня.
Я также сделал скриншот моего кода во время отладки.
Есть идеи?
Большое спасибо!