• Главная
  • Контакты
Подписаться:
  • Twitter
  • Facebook
  • RSS
  • VK
  • PushAll
logo

logo

  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • За год
    • Положительные
    • Отрицательные
  • Сортировка
    • По дате (возр)
    • По дате (убыв)
    • По рейтингу (возр)
    • По рейтингу (убыв)
    • По комментам (возр)
    • По комментам (убыв)
    • По просмотрам (возр)
    • По просмотрам (убыв)
Главная
  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • Главная
  • Способы отладки JS на клиенте

Способы отладки JS на клиенте +11

23.04.2017 18:21
comerc 20 6400 Источник
Разработка веб-сайтов*, ReactJS*, JavaScript*

Применительно к разработке на create-react-app (CRA) в браузере и в IDE WebStorm. Если вам известны какие-либо другие способы отладки, большая просьба поделиться знаниями.


Отладка внутри Chrome


После запуска приложения в браузере, нажмите [F12], чтобы открыть Chrome DevTools, потом переключитесь на вкладку Sources, нажмите [Ctrl+P], в строке поиска введите имя требуемого файла.



 
Благодаря Source Map, мы видим исходный JSX. Далее можно отметить нужную строчку кода, как точку останова, затем перегрузить страницу по [F5], и получить желаемое — инструмент отладки.



 
Чтобы не искать файл в браузере, можно вставить волшебное слово debugger прямо в исходном коде, исполнение прервется в нужном месте.



 
Иногда хочется отлаживать по старинке, с помощью console.log(). Можно получить значение переменной внутри JSX прямо в точке её применения.


<img src={console.log('logo', logo) || logo} />

Как это работает: console.log() вернет undefined и код выполнится дальше по условию "||", а в консоли браузера мы увидим искомое значение, например: "/static/media/logo.5d5d9eef.svg".


Отладка внутри IDE WebStorm


Используется последняя версия 2017.1. Сначала нужно настроить окружение. Установите расширение Chrome — JetBrains IDE Support. Затем добавьте Run/Debug-конфигурацию.



 
Запустите CRA обычным образом, выполнив в терминале:


$ yarn start

Выберите конфигурацию Debug и нажмите кнопку с иконкой жука (в правом верхнем углу IDE):



 
Откроется браузер с предупреждением "JetBrains IDE Support отлаживает этот браузер". (Замечено, что если теперь открыть Chrome DevTools по [F12], то отладка в WebStorm завершится — не надо этого делать). Далее можно отметить нужную строчку кода, как точку останова, затем перегрузить страницу браузера по [F5], и получить желаемое — инструмент отладки внутри WebStorm.



 
Отладка тестов требует дополнительной настройки, потому как этот код не запускается в браузере. Установите глобально пакеты:


$ npm install -g babel-cli babel-preset-es2015

Затем добавьте ещё одну Run/Debug-конфигурацию.



 
Выберите конфигурацию Tests и нажмите кнопку с иконкой жука:



 
Ура, нам доступна отладка тестов.


Поделиться с друзьями
-->

Комментарии (20)


  1. SbWereWolf
    23.04.2017 22:40
    #10187746
    +1

    большое спасибо за туториал


  1. aon24
    23.04.2017 22:47
    #10187754
    +1

    Полезная информация.
    Вопрос к знатокам npm:
    существует ли возможность, работая в среде create-react-app, обращаться к другому серверу ( не localhost:3000) за реальными данными?
    Если нет, еще вопрос:
    можно ли в среде create-react-app создать не минимизированную версию?
    Что-то типа «npm run build», но чтобы потом можно было отлаживать.


    1. comerc
      23.04.2017 22:59
      #10187764
      +1

      существует ли возможность, работая в среде create-react-app, обращаться к другому серверу ( не localhost:3000) за реальными данными?

      Конечно. Посмотрите на мой фан-проект. Сервер живет по адресу localhost:9000 и разрешает обращаться к себе всем (Access-Control-Allow-Origin)


    1. vilozio
      24.04.2017 09:29
      #10188060
      +2

      В create-react-app используется webpack-dev-server, с ним можно перенаправлять запросы через proxy на бэкэнд сервер:
      https://webpack.js.org/configuration/dev-server/#devserver-proxy


      1. comerc
        24.04.2017 09:45
        #10188086

        Я использую axios для всех RESTful-запросов, определил в конфиге baseURL: https://github.com/mzabriskie/axios#request-config


        1. Tihon_V
          24.04.2017 10:31
          #10188140
          +1

          Я использую docker-контейнер с nginx в качестве прокси.

          Кусочек конфига
          if ($request_method = OPTIONS ) {
          add_header Access-Control-Allow-Origin "*";
          add_header Access-Control-Allow-Methods "GET, PUT, POST, DELETE, HEAD, OPTIONS";
          add_header Access-Control-Allow-Headers "Authorization";
          add_header Access-Control-Allow-Credentials "true";
          add_header Content-Length 0;
          add_header Content-Type text/plain;
          return 200;
          }


    1. justboris
      24.04.2017 10:28
      #10188132
      +1

      В Readme есть официальный способ.


      Добавляете в package.json секцию proxy, и все запросы, не возвращающие файлы, будут проксироваться на указанный адрес.


      Позволяет обойтись без дополнительной настройки cors, который может быть запрещен требованиями безопасности.


    1. justboris
      24.04.2017 10:29
      #10188136

      можно ли в среде create-react-app создать не минимизированную версию? Что-то типа «npm run build», но чтобы потом можно было отлаживать.

      А что не так с npm start?


  1. LastDragon
    24.04.2017 09:08
    #10188024
    +3

    Visual Studio 2017 прямо из коробки умеет аналогично JetBrains-у, только ставить вообще ничего не надо (2015 так-то тоже умеет, но нигде кроме IE оно у меня не заработало), единственное, консолька в самом браузере сильно удобнее чем в студии.


    1. comerc
      24.04.2017 09:51
      #10188096
      -3

      Отладка внутри WebStorm выигрывает против отладки в браузере.


      1. vba
        24.04.2017 11:50
        #10188286
        +1

        Отладка JS во всех продуктах JetBrains ужасно тормозит, точнее не сама отладка а обновление состояния переменных из шага в шаг. Да и что там выигрывает, не понятно, в браузере функционал даже побогаче будет.


        1. comerc
          24.04.2017 12:49
          #10188386

          Про всех не скажу, но WebStorm версии 2017.1 работает нормально. При том, что у меня не самая мощная машина на свете.


          Расстраивают тормоза Resolving Reference после перехода на Flow. Инспекцию по ESLint внутри WebStorm отключил — тоже тормозит, и в CRA прекрасно настроен вывод сообщений ESLint.


          Основной плюс, в моём представлении, что не нужно переключать контекст внимания. Ловишь ошибки там же, где их исправляешь.


  1. NafFiQ
    24.04.2017 09:28
    #10188052
    +1

    Спасибо за статью.
    Возник такой вопрос: как интегрировать тесты в create-react-app на jest с webstorm без команды eject?


    1. comerc
      24.04.2017 09:48
      #10188090

      Вы про запуск каждого теста по кнопке play напротив декларации теста в коде? Этого не пробовал еще настроить.


      1. NafFiQ
        24.04.2017 10:40
        #10188154
        +1

        Именно, ранее запускал тесты на karma.js в webstorm и понравилась подсветка сломанных тестов и быстрый переход. Очень помогает с рефакторингом.

        Поделитесь, как получится :)


  1. hamMElion
    24.04.2017 09:35
    #10188076
    +2

    Есть небольшое расширение для Chrome React Dev Tools — дополнительная вкладка Dev Tools Chrome. С ним отладка компонентов реакта в браузере становится сильно удобнее.
    А если вы решили использовать SPOT в виде Redux, то еще могу посоветовать вот это мега-расширение


    1. comerc
      24.04.2017 12:53
      #10188396

      Расшифруйте аббревиатуру SPOT, пожалуйста.


      1. hamMElion
        24.04.2017 22:36
        #10189352
        +2

        Впервые я эту аббревиатуру услышал от коллег-немцев, мне ее расшифровали как Single Point of Truth. А в англоговорящей среде это SSOT — Single source of truth. По-моему, не так красиво звучит, как SPOT, ну как уж где привыкли.


  1. Chaptykov
    24.04.2017 19:57
    #10189120
    +1

    Любопытно, что статья называется «Способы отладки JS на клиенте», а второй абзац уже начинается с «мы видим исходный JSX», вторая часть статьи называется «Отладка внутри IDE WebStorm».


    Так что из первой части получаем, что отлаживаем не совсем JS, а из второй, что не совсем на клиенте.


    1. comerc
      25.04.2017 10:24
      #10189776

      Палка о двух концах. Способы отладки клиентского JS — как-то не очень звучит.

МЕТКИ

  • Хабы
  • Теги

Разработка веб-сайтов

ReactJS

JavaScript

вискас

СЕРВИСЫ
  • logo

    CloudLogs.ru - Облачное логирование

    • Храните логи вашего сервиса или приложения в облаке. Удобно просматривайте и анализируйте их.
Все публикации автора
  • Или Meteor +3

    • 02.08.2017 12:00

    10 шагов настройки Create React App + TypeScript + Ant-Design +7

    • 31.07.2017 16:00

    Redux Business Logic +7

    • 02.07.2017 21:25

    Интеграция React и DataTables — не так тяжело, как рекламируют +8

    • 10.06.2017 14:30

    Перевод доклада про mobx-state-tree — всё лучшее из миров Redux и MobX +4

    • 22.05.2017 10:50

    Почему программисты не могут программировать +12

    • 17.05.2017 09:02

    2017: Автостопом по галактике JavaScript +41

    • 13.05.2017 18:00

    Быстрый старт на React Native +6

    • 01.05.2017 02:01

    Загрузка данных из REST API +10

    • 26.04.2017 10:10

    Способы отладки JS на клиенте +11

    • 23.04.2017 18:21

Подписка


ЛУЧШЕЕ

  • Сегодня
  • Вчера
  • Позавчера
09:08

PCIe и DDR3 на ПЛИС Gowin: как мы заставили работать то, что не работало у производителя +33

09:01

Что происходит в Wi-Fi: анализ трафика на канальном уровне +27

07:05

Как Невил Маскелайн взломал беспроводной телеграф Маркони +20

08:01

Как защитить веб‑приложения с помощью Coraza (ModSecurity) +19

02:35

Как я объяснял племяннику 2x + 4 = 10 и случайно собрал визуальную лабораторию (сайт) +19

13:01

«Машина времени для света»: голографические лазеры +17

12:50

Рынок IT-вакансий сломался и ничего не понятно? А ведь за изучение таких процессов в 2010 году дали Нобелевскую премию +16

08:04

PostgreSQL и временные таблицы. Часть 2: почему 1024 счётчиков бывает мало +16

08:43

AI‑дайджест #4: закон об ИИ, кризис доверия и мнение коллег из Лаборатории искусственного интеллекта +15

12:27

AmneziaWG: от 2.0 к 3.1, и что творится у вас под капотом +14

08:01

Как работает протокол нового агента Битрикс24 Коворк/Код +14

07:02

Периодическая таблица аббревиатур корпоративного ландшафта: проектирование, производство и активы +13

10:00

Как мы разобрали геймификацию на микросервисы и стали выпускать механики за неделю вместо года +12

12:00

ИИ-агенты все помнят. И это плохо +10

07:37

Fermi Explorer: отправляем зонд к Альфе Центавра всего за 15 млн долларов +9

13:03

IBM Simon: История прото-смартфона, его взлет и провал +8

11:58

Книга: «Предметно-ориентированное проектирование. Модернизация легаси-систем и снижение рисков с помощью DDD» +8

11:53

Как словить вайб: разработка, паяльник, пчёлы и попытки убедить семью, что ты не сошёл с ума +8

10:05

200 OK от гейтвея ничего не значит +7

09:04

Видит ли MAX ваш VPN при Split Routing, если VPN не установлен на компьютере? +7

13:42

Нейронный Навье‑Стоксгейт: скандал с OpenAI вокруг решения «задачи тысячелетия» на $1'000'000 +119

14:43

От статьи на Хабре до Байконура: вывоз «Прогресса», хабраэффект и космический перенос +71

14:43

От статьи на Хабре до Байконура: вывоз «Прогресса», хабраэффект и космический перенос +71

09:01

HTML и CSS помогут вам сделать дружелюбный интерфейс! Вот моя коллекция простых лайфхаков +55

07:31

Как на ровном месте сэкономить 1000+ ядер, или Куда на самом деле уходили 80% CPU +48

07:23

ООН проголосовала за новую карту мира, показывающую истинный масштаб Африки +42

08:00

Архитектура современных ИИ-агентов: собираем прототип за один вечер +40

15:16

Полупроводниковый завод своими руками +33

13:01

Как выбрать IT-профессию и понять, что учить — метод на примере кибербезопасности +33

18:52

Модель выложила системный промпт, в котором было написано его не выкладывать +29

12:40

Как запустить Qwen3.8-Flash-Next 125B на 6 ГБ VRAM +28

12:22

Люди гибнут за канбан. 7 способов убить даже хорошую доску +27

05:01

Никто не просил — а я сделал банку робота‑секретаря +24

07:05

Хардварные стартапы — которые меняют мир +23

07:00

Куда исчезли 15 тысяч кВт·ч: автоматизируем учет на старом заводе +23

09:09

«Ключ к доверию. Безопасность в эпоху высоких технологий»: как готовили выставку Музея криптографии и Бастиона +19

05:57

Хакерспейсы Батуми и Тбилиси + ASIC чип спроектированный в Грузии +19

14:38

SPF, DKIM и DMARC на примере обычного письма: как работает email‑аутентификация +18

11:14

Черный экран смерти: как прочитать дамп за пять минут вместо переустановки Windows +17

07:01

Шесть ярких презентаций о технологиях как бесплатный архив идей и уроков +17

07:09

Теренс Тао: вундеркинд из Австралии, который вырос гениальным математиком +59

13:01

Возвращение из мёртвых монолитной SD-карты +55

07:48

Электронные лампы. Большой обзор в трех частях. Часть 3 +48

08:00

Почему CD и DVD не вечные: сколько живут оптические диски на самом деле +45

22:00

Эти пчелы делают неправильный с++ +42

09:01

Я искренне беспокоюсь по поводу «GTA VI» +42

12:57

Интерпретатор Python в 1024 байтах +39

11:38

Как говорить с искусственным интеллектом. Книга о промптах +37

07:03

Анти‑тест: сколько шагов сотруднику ИБ до нарушения УК РФ? +37

12:33

Экономика владения мобильной фермой. Сколько стоит собрать собственный парк устройств +35

13:31

QArtText: QR коды для чтения невооружённым глазом +21

11:05

Что реально даёт HTTP/2 и HTTP/3 — и когда не даёт вообще ничего +18

19:44

«Я Сетунь 70». Эмулятор троичного компьютера на Rust +16

12:57

Странные олдскульные технологии, которые так и не взлетели, часть 3 +16

12:26

Недельный геймдев: #294 — 6 сентября, 2026 +16

13:09

От 10 первопроходцев до 700 энтузиастов: Бета-программа ОС Аврора отмечает 5-летие +15

12:13

Как мы в Мой МТС сделали SOS-кнопку для быстрой связи ребенка с родителем +14

11:30

Прогноз: благодаря ИИ формальная верификация станет мейнстримом +14

09:30

Как ADR помог мне не утонуть в первой крупной архитектурной задаче +14

09:01

Обновления GigaIDE за август 2026 +13

ОБСУЖДАЕМОЕ

  • ООН проголосовала за новую карту мира, показывающую истинный масштаб Африки +42

    • 233   18000

    Нейронный Навье‑Стоксгейт: скандал с OpenAI вокруг решения «задачи тысячелетия» на $1'000'000 +119

    • 207   49000

    Как говорить с искусственным интеллектом. Книга о промптах +37

    • 83   104000

    Ребрендинг по-азиатски: примеры неудачной смены логотипа +10

    • 72   15000

    Модель выложила системный промпт, в котором было написано его не выкладывать +29

    • 71   19000

    Как настроить Arch Linux, чтобы он обошёл Windows 11 по производительности и стилю +4

    • 55   12000

    Как запустить Qwen3.8-Flash-Next 125B на 6 ГБ VRAM +28

    • 53   79000

    Анти‑тест: сколько шагов сотруднику ИБ до нарушения УК РФ? +37

    • 51   104000

    Cursor ограничивает доступ из России. Куда переходить? -6

    • 44   15000

    Как мы обучаем обычных сотрудников использовать ИИ (и зачем) +2

    • 36   6800

    Возвращение из мёртвых монолитной SD-карты +55

    • 35   14000

    Эти пчелы делают неправильный с++ +42

    • 30   16000

    Я искренне беспокоюсь по поводу «GTA VI» +42

    • 29   15000

    Почему CD и DVD не вечные: сколько живут оптические диски на самом деле +45

    • 28   14000

    Я не читаю свой код. Два месяца вайбкодинга большого проекта — честный отчёт +13

    • 26   6500
  • Главная
  • Контакты
© 2026. Все публикации принадлежат авторам.