#debugging #visual-studio-code #vuejs2 #chrome-debugging
Вопрос:
Я пытаюсь отладить приложение Vue с помощью VSC. У меня есть следующий файл launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Attach to Chrome",
"port": 9222,
"request": "attach",
"type": "pwa-chrome",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}/src",
"breakOnLoad": true,
"sourceMapPathOverrides":{
"webpack:///src/*": "${webRoot}/*"
}
},
{
"type": "pwa-chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}/src",
"breakOnLoad": true,
"sourceMapPathOverrides":{
"webpack:///src/*": "${webRoot}/*"
}
}
]
}
Я также добавил следующее vue.config.js файл в корневой каталог проекта
module.exports = {
configureWebpack: {
devtool: 'source-map'
},
devServer: {
port: 8080
}
}
Для отладки приложения Vue я использую «службу запуска npm» в терминале, нажимаю опцию «Выполнить и отладить» в меню слева и выбираю конфигурацию отладки под названием «Запустить Chrome на локальном хосте».
Я не могу привязать какие-либо точки останова,т. Е. Точки останова представляют собой незаполненные серые круги в коде.
Не знаю, что попробовать дальше, в онлайн-поиске ничего не всплывает о том, в чем может быть проблема.
Ответ №1:
у вас, вероятно, есть несоответствие в вашем "sourceMapPathOverrides"
.
"sourceMapPathOverrides"
должно указывать на корневой файл, в котором webpack сгенерировал исходную карту. Вы можете проверить это в своих инструментах разработки chrome.
Сделайте следующее
1 — Откройте свои инструменты разработки chrome:
2 — Исследуйте webpack://
большинство случаев, когда он находится внутри .
или src
в папках. Чтобы проверить это, откройте случайный компонент vue, и он должен выглядеть так же, как в вашем редакторе vs-кода, это правильная исходная карта, на которую "sourceMapPathOverrides"
следует указывать.
Бонус
Точная конфигурация, которую я использовал тогда, такова:
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "vuejs: chrome",
"url": "http://localhost:8080/",
"webRoot": "${workspaceFolder}/src",
"breakOnLoad": true,
"sourceMapPathOverrides": {
"webpack:///src/*": "${webRoot}/*"
}
}
]
}
В любом случае, убедитесь, что вы выполнили шаги, которые я перечислил, и посмотрите, исправит ли это проблему.
Комментарии:
1. Решил мою проблему для стандартного Vue. Я смог привязать точки останова внутри стандартного Vue, но не раньше, чем компоненты действительно загрузятся. Так что, похоже, это всегда срабатывало, я просто не понимал, что они не будут привязываться до загрузки. Но…ничто, связанное с хранилищем VUEX, не позволит использовать точки останова, включая любые JS, которые я импортирую в файл js этого хранилища. Однако, если я установлю точку останова со стороны Chrome, она передаст управление VSC, и я смогу пройти через код таким образом. Не совсем так, как я хочу, чтобы это работало, но в литературе VUEX нет ничего, что ссылалось бы на какой-либо другой способ.