Не удается отладить текущий машинописный файл в VS Code, поскольку не удается найти соответствующий JavaScript

Я использую Visual Studio Code версии 1.17, и моя цель — отладить текущий машинописный файл. У меня запущена задача сборки, поэтому у меня всегда есть соответствующий файл javascript, например:

src/folder1/folder2/main.ts
src/folder1/folder2/main.js

Я пробовал со следующей конфигурацией launch.json:

{
  "type": "node",
  "request": "launch",
  "name": "Current File",
  "program": "${file}",
  "console": "integratedTerminal",
  "outFiles": [
    "${workspaceFolder}/${fileDirname}**/*.js"
  ]
}

Но получаю ошибку: Cannot launch program '--full-path-to-project--/src/folder1/folder2/main.ts' because corresponding JavaScript cannot be found.

Но соответствующий файл JavaScript существует!

tsconfig.json:

{
"compileOnSave": true,
"compilerOptions": {
    "target": "es6",
    "lib": [
        "es2017",
        "dom"
    ],
    "module": "commonjs",
    "watch": true,
    "moduleResolution": "node",
    "sourceMap": true
    // "types": []
},
"include": [
    "src",
    "test"
],
"exclude": [
    "node_modules",
    "typings"
]}

person DauleDK    schedule 05.11.2017    source источник
comment
Добавлен stackoverflow.com/a/53236103/428486 с решениями в том же каталоге и в отдельном каталоге, оба из которых, как я подтвердил, работают в vscode. , Надеюсь, поможет!   -  person lucascaro    schedule 10.11.2018


Ответы (10)


Конфигурация вашего outFiles указывает на неверный каталог.

Замена вашей конфигурации launch.json на это исправит это:

{
  "type": "node",
  "request": "launch",
  "name": "Current File",
  "program": "${file}",
  "console": "integratedTerminal",
  "outFiles": ["${fileDirname}/*.js"]
}

Из ссылки на переменную vscode launch.json:

${fileDirName} имя текущего открытого файла

должен быть каталог, который вам нужен.

Обратите внимание, что вы также можете использовать "outFiles": ["${fileDirname}/**/*.js"] для включения подкаталогов.

Используемая вами конфигурация добавляет следующий каталог:

"${workspaceFolder}/${fileDirname}**/*.js"

Что переводится как:

"/path/to/root/path/to/root/src/folder1/folder2/**/*.js"

то есть путь к корню указан дважды, что делает его недопустимым путем.

Если ваши файлы .js находятся в другом outDir: просто используйте путь к такому каталогу. Typescript sourceMaps сделает все остальное.

Например, если вы поместите файлы .js в каталог dist:

"outFiles": ["${workspaceFolder}/dist/**/*.js"]
person lucascaro    schedule 10.11.2018
comment
провел несколько тестов, и вы добились успеха - свойство outFiles сделало это возможным. Я предполагаю, что моя проблема заключалась в том, что я не думал, что система достаточно умна, чтобы lkp файл с помощью исходных карт, но теперь это более ясно благодаря вашему ответу. Другими словами, это не будет работать с отключенными исходными картами? - person DauleDK; 10.11.2018
comment
Правильно, это не будет работать с отключенными исходными картами. Не очень ясно в документах, но это не работает, если вы отключите sourceMaps в tsconfig.json: code.visualstudio.com/docs/nodejs/nodejs-debugging#_source-maps - person lucascaro; 10.11.2018

Проблема может быть с вашими файлами карт, а не с конфигурацией.

Прежде чем пытаться что-либо еще, вы хотите убедиться, что ваши пути, которые вы используете в своей конфигурации запуска, верны.

Вы можете сделать это, временно заменив пути абсолютными путями в вашей системе, чтобы увидеть, работает ли это.

Если это не работает, вам следует:

Проверьте свой tsconfig и убедитесь, что mapRoot под compilerOptions ничего не установлено. Вот что говорит об этом официальная документация:

Указывает расположение, в котором отладчик должен найти файлы карт вместо созданных местоположений. Используйте этот флаг, если файлы .map во время выполнения будут расположены в другом месте, чем файлы .js. Указанное местоположение будет встроено в sourceMap, чтобы указать отладчику, где будут расположены файлы карты.

Подробнее об этом можно прочитать здесь

В большинстве случаев вы действительно не хотите ничего устанавливать.

Также убедитесь, что

"sourceMap": правда`

устанавливается в compilerOptions в tsconfig.json, и создаются файлы карт.

person Aakash Malhotra    schedule 10.11.2017
comment
Отладчик работает, если заданы абсолютные пути. mapRoot не установлен - я отредактирую исходный вопрос, чтобы включить tsconfig.json. Наконец-то генерируются файлы карты. - person DauleDK; 10.11.2017
comment
Если он работает с абсолютными путями, то это, очевидно, означает, что вам нужно правильно установить программу и outFiles. Я установил оба так: "program": "${workspaceFolder}/backend/src/app.ts", "outFiles": [ "${workspaceFolder}/backend/build/**/*.js"] ${workspaceFolder} дает вам расположение домашней папки вашего проекта. Оттуда вы можете перейти к своим файлам. Вы можете посмотреть мою полную конфигурацию в моем ответе ниже. stackoverflow.com/questions/31169259/… - person Aakash Malhotra; 10.11.2017
comment
stackoverflow.com/a/47215246/7022062 ‹ - исправление ссылки, которую Аакаш Малхотра предоставил в своем комментарии. - person Dmitry Shevkoplyas; 22.12.2017
comment
Инсайдеры VS Code в настоящее время (январь 19) комментируют SourceMap по умолчанию (tsconfig.json). Мне пришлось раскомментировать Sourcemap:true, иначе исходные карты не создаются, а конфигурация запуска отладки по умолчанию в launch.json приведет к тому, что VS-C выдаст соответствующую ошибку Javascript files can be found. Вы ожидаете, что поведение VS-C по умолчанию будет заключаться в создании исходных карт, но, по-видимому, это не так. - person bgausden; 18.01.2019
comment
Я использую VScode 1.46.1 и собираюсь протестировать свой последний и десятый launch.json... Обратите внимание, что он написан простым текстом внизу страницы справки VsCode, не может найти соответствующий JavaScript. Это серьезный облом для новичков в TypeScript! Указание абсолютного пути увеличило количество ошибок в журнале, так что это определенно был знак в правильном направлении. Большое спасибо. - person Alsushi; 29.07.2020

На случай, если кто-то еще столкнется с этим: если вы используете webpack для создания своего проекта, вы должны использовать devtool, который создает исходные карты, совместимые с VS Code. Путем проб и ошибок cheap-module-source-map и source-map работают хорошо. В итоге я добавил это к своему webpack.config.js:

devtool: env.production ? 'source-map' : 'cheap-module-source-map'
person J. Perkins    schedule 14.08.2018

Возможно, вам потребуется включить исходные карты в файле tsconfig.json.

"sourceMap": true,
person Scott w    schedule 28.01.2020

Я исправил это, добавив "sourceMap": true в tsconfig.json

launch.json похоже

{
"version": "0.2.0",
"configurations": [
  {
    "type": "node",
    "request": "launch",
    "name": "Launch Program",
    "program": "${workspaceFolder}/src/index.ts",
    "preLaunchTask": "tsc: build - tsconfig.json",
    "outFiles": ["${workspaceFolder}/build/**/*.js"]
  }
]
}
person Viswanath Lekshmanan    schedule 24.02.2020

Помните, что программный файл, который вы хотите запустить, должен иметь фокус перед выполнением, иначе вы получите диалоговое окно с ошибкой «Не удается найти Javascript». Особенно, когда файл, который вы выполняете, не является файлом Javascript или файлом Typescript. Потому что в файле launch.json по умолчанию указана конфигурация "program": "${file}". Это означает, что файл, который в данный момент отображается на экране, будет выполнен.

Так, например: если вы находитесь в файле, отличном от js или не ts, скажем, tsconfig.json или launch.json, и вы нажимаете команду «Выполнить», вы получите это диалоговое окно с ошибкой.

Правильная настройка проекта Typescript в VS Code

Перед созданием проекта убедитесь, что на вашем компьютере установлены Typescript и Node.js.

1.Инициализировать в терминале

В терминале создайте новую папку для вашего проекта.

mkdir MyProject

Измените текущий каталог на папку, которую вы создали выше.

cd MyProject

Инициализируйте проект, чтобы включить Typescript. Это создаст файл tsconfig.json.

tsc --init

Откройте эту папку в VS Code. Эта команда работает из MacOS. Вы также можете открыть вручную.

code .

2.Настройте выходной каталог

Теперь перейдите в файл tsconfig.json и добавьте следующие строки в файл compilerOptions. Да, вам нужно указать выходной каталог здесь в tsconfig.json вместо launch.json. VS Code всегда будет искать файлы по умолчанию outDir в launch.json, то есть ${workspaceFolder}/**/*.js.

"outDir": "./out",  /* Specify .js output files. */
"sourceMap": true   /* Generate corresponding .map files. */

Запуск/отладка проекта

Напишите простую программу для тестирования и запуска: welcome.ts

console.log('Welcome to Typescript');

1. Сборка

Теперь нажмите «Выполнить задачу сборки» (Shift + Command (Ctrl) + B) в меню «Терминал» кода VS, введите следующую команду и нажмите клавишу ввода:

tsc: watch - tsconfig.json

Вам нужно запустить задачу сборки один раз, когда вы впервые открываете проект. Это начнет отслеживать изменения кода в проекте.

2.Выполнить

Теперь перейдите к программе Typescript, которую вы хотите запустить (убедитесь, что ваш программный файл .ts имеет фокус). В меню «Выполнить»:

Нажмите «Начать отладку» для отладки (F5).

OR

Нажмите «Выполнить без отладки» (Ctrl + F5).

Вывод будет отображаться в консоли отладки.

Вот и все. Сначала это может показаться ошеломляющим, но когда вы к этому привыкнете, это будет легко.

person Yogesh Umesh Vaity    schedule 02.05.2020

У меня была странная ситуация, когда моя машина работала отлично, основываясь на предложениях @lucascaro, но на чужом компьютере с той же версией vscode, node, ts и т. д. Я все еще мог видеть сообщение об ошибке.

Итак, если вы выполнили все инструкции @lucascaro и все еще видите сообщение об ошибке, попробуйте добавить это в свою конфигурацию launch.json после свойства программы, например:

{
  ...
  "preLaunchTask": "tsc: build - tsconfig.json",
  ...
}

Это дополнение заставило его работать на второй машине, но если я добавлю его на свой, оно больше не будет работать.

Так что, если вы находитесь в месте, где это все еще терпит неудачу, попробуйте это.

person asuciu    schedule 24.10.2019

Это сработало в моем случае:

Зайдите в свой gulpfile.js и найдите строку, содержащую sourcemaps.write(). Измените эту строку на

.pipe(sourcemaps.write('.', { includeContent: false, sourceRoot: '../lib' }))

Перестройте свой проект и попробуйте снова запустить отладчик. Доверенность принадлежит roblourens на GitHub. Он связал эта страница, что было полезно.

person mneumann    schedule 12.02.2019

В моем случае виновником была установка рабочего каталога в какой-либо каталог, отличный от каталога файла в launch.json:

"cwd": "${workspaceFolder}/dist"

Возможно, это может быть ошибка в VSCode.

person mrmashal    schedule 12.05.2019

Привет, у меня была такая же проблема. Вам просто нужно добавить в путь пользователя или глобальную переменную пути путь, по которому вы установили npm.

C:\Users\userName\AppData\Roaming\npm 

введите здесь описание изображения

person سعید دالوند    schedule 26.07.2018