Отладчик кода Visual Studio Chrome не устанавливает точки останова внутри функции генератора в React
Я использую последнюю версию кода Visual Studio и расширение отладчика Chrome, и мой код React SPA.
Когда я пытаюсь установить точки останова внутри функций генератора(то есть функции *), точка останова перемещается в верхнюю часть функции, и я не могу остановиться, когда захочу.
Step Over также не работает, но перенеси меня в какую-то библиотеку низкого уровня.
Для нормальных функций точки останова работают правильно.
Я что-то пропустил? Это известное ограничение или ошибка? Есть ли какие-либо инструменты (например, Edge/Firefox или нативный отладчик Chrome), которые позволяют лучше отлаживать функции генератора?
0 ответов
В настоящее время я вижу то же самое и ищу решение. Это то, что я нашел до сих пор, и может быть полезно.
В нашем случае мы используем babel для переноса нашего кода, и, глядя на код, созданный babel, мы увидели, что генераторы переносились для браузеров, на которые нацелен список обозревателей, читаемый @babel/preset-env
, Итак, в качестве начального теста мы удалили @babel/preset-env
из нашей сборки dev и протестированы локально в Chrome 70. Генераторы больше не переносились, и мы могли успешно устанавливать точки останова в VSCode.
Поэтому для нас было принято решение не переносить сборки для разработчиков, а переносить для наших целевых браузеров для производственных сборок.
Для справки вот конфигурация babel, которую мы использовали для тестирования этого решения:
module.exports = {
presets: [
'@babel/preset-react'
],
plugins: [
[
'@babel/plugin-proposal-object-rest-spread',
{
useBuiltIns: true
}
],
'@babel/plugin-proposal-class-properties',
'@babel/plugin-transform-modules-commonjs'
],
env: {
production: {
presets: [
[
'@babel/preset-env',
{
debug: false,
useBuiltIns: 'usage'
}
]
],
plugins: [
'@babel/plugin-transform-runtime'
]
}
}
}
Мы можем установить BABEL_ENV=production
в любых производственных скриптах npm, где мы хотим ориентироваться на наши поддерживаемые браузеры.
{
"name": "testapp-ui",
"version": "1.0.0",
"private": true,
"scripts": {
"build": "rm -rf dist && mkdir dist && NODE_ENV=production BABEL_ENV=production npm run build:webpack",
"build:dev": "rm -rf dist && mkdir dist && NODE_ENV=development npm run build:webpack",
"build:webpack": "webpack --progress --debug",
...
Благодаря ответу Бернарда Лича я обновил файл конфигурации.babelrc (один из возможных форматов, как описано в https://babeljs.io/docs/en/configuration).
И это позволяет устанавливать точки останова в среде разработки.
Измененные строки в.babelrc закомментированы:
{
"presets": [
//[
// "es2015",
// {
// "modules": false
// }
//],
"react",
"stage-0"
],
"env": {
"test": {
"presets": ["react"]
"prod": {
"presets": [["es2015"], "react"]
}
}
}
Чтобы использовать разные конфигурации для dev и prod, вы должны установить, например, BABEL_ENV=prod и иметь разные разделы в элементе "env" (из статьи Как настроить babel для работы с разными конфигурациями в разных средах)
Ссылки по теме:
Как отлаживать ES6 NodeJS с помощью VSCode
Отладка с помощью babel-register + NodeJs не работает #5728