• Главная
  • Контакты
Подписаться:
  • 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

Подписка


ЛУЧШЕЕ

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

Воскресная барахолка под Валенсией: винтажная аудиотехника, ноутбуки и много чего еще +21

05:04

Шатдаун правительства США, а также Грокипедия от Илона Маска +21

07:28

WiFi, который не ловил +14

07:05

Обзор решений для домашних кинотеатров: Plex, Jellyfin и альтернативы +9

08:22

Работа с RISC-V контроллерами на примере CH32V303. Часть 9. Многозадачность +7

06:37

AI Review кода за 30 минут: локальная LLM прямо в CI/CD +7

07:30

Python 3.14: ошибки стали понятнее, чем когда-либо +4

06:17

От LPT_Print до IaC: Хроника Эволюции Системных Администраторов в России. Наша 25-летняя «Одиссея» +4

05:36

Секреты мультиклауд-FinOps: Как не спускать миллионы рублей впустую при использовании нескольких облаков +4

04:00

Гайд по автотестам, часть 2. Юнит-тесты +4

07:33

Не отходя от ноутбука: как ученые создают новые материалы с помощью квантовых моделей +3

08:34

Kandinsky Image научился генерировать изображения с надписями на русском +2

08:05

ИИ в образовании. Учить или учиться +2

07:58

GGUF: квантизация с калибровкой (imatrix) +2

07:57

Джона Тёрнус и его патенты: что разработал будущий CEO Apple +2

06:19

Дом в облаке, которое твое: запускаем личный сервер на UmbrelOS с полным шифрованием +2

05:04

Проведено исследование термоядерного синтеза протон–бор, при котором не выделяются нейтроны +2

08:47

ИИ как новая промышленность: зачем миру столько электричества +1

08:25

Небеса не прощают ошибок: как выжить в бизнесе, где каждая неудача стоит компании +1

08:20

Современные лабораторные стенды: как российские вузы применяют отечественные среду Engee и КПМ РИТМ для моделирования +1

13:01

Пайплайн цифрового фотографа на LINUX +70

18:07

Zip-бомбы против агрессивных ИИ-краулеров +43

15:18

Про Лысенко, Вавилова, письмо трёхсот и генетику в СССР +42

09:01

Что значит «хороший вкус» в разработке ПО? +37

14:10

Отрезчик термоусадки v2.0 +34

13:57

Большой FAQ про Wi-Fi +33

13:20

Русские ящеры профессора Амалицкого +31

08:00

Как я сделал робота — что хотел и что получилось. Часть 1 +28

11:05

Элементы игрового дизайна и механики, от которых пора избавиться +22

16:40

User guide — пустая формальность или незаменимый документ? Руководство, как написать руководство +21

08:00

Motorola Razr V3: икона стиля из нулевых. Разбираем и изучаем +21

00:05

Атом смысла: как из ничего получить все +20

07:41

От GPT-2 к gpt-oss: анализ достижений архитектуры +18

11:20

О горьком опыте масштабирования производств, о важности ведер и о причинах седины +17

12:06

LuckFox pico — одноплатник в форм факторе Arduino +14

10:16

Паттерны программирования при работе с LLM +10

21:17

Бесконечность в ваших данных – power laws +9

12:24

Open source-стратегии: как и с кем Arenadata развивает партнёрские отношения, и причем здесь открытые технологии +9

11:51

Почему хороших middle-разработчиков не повышают до senior — честный взгляд изнутри +9

04:38

Как я переделал свой мини-ПК и зачем мне это было нужно +9

14:06

Тайна самой дешевой консоли с Ozon +166

17:46

Линейная алгебра: четыре разных подхода к одной задаче +62

08:30

Реверс-инжиниринг: стартуем прошивку ReadyNAS через QEMU +55

13:01

Pentax MZ-M и другие: как пластиковые камеры чуть не убили пионеров зеркалкостроения +42

09:01

«LLVM для AI». Крис Латтнер и язык программирования Mojo +38

17:59

Предварительный взгляд на 3I/ATLAS с Марса +29

09:16

OpenSource, или как я перестал бояться и полюбил автотесты +24

09:16

OpenSource, или как я перестал бояться и полюбил автотесты +24

05:30

Go, Rust или всё же C++? Куда мы переписываем наш высоконагруженный бэкенд в 2025 +23

06:57

Topical Authority на практике: как стать экспертом в глазах Google (и почему одна статья никогда не ранжируется) +20

11:22

Parquet — король умер? Да здравствует… кто? Обзор BtrBlocks, FastLanes, Lance и Vortex +19

08:01

Linux 6.17: свежие драйверы, быстрые сети и надежная память +18

12:15

Минимальный каркас самописного Bootloader'a на STM32F103C8T6. Пошаговый пример +17

13:38

Экспериментальный селф-хостинг — материалы для начинающих, личный опыт, DIY-гайды и домашние лабы +16

08:04

FreeBSD и крепкий сон ноутбука +16

10:27

Реализация сервиса на C++: TDD, DDD и событийно-ориентированная архитектура +13

12:00

Лабораторный блок питания с плавной регулировкой, цифровым дисплеем и дополнительными выходами USB +12

09:00

500 откликов, как я искал работу +12

03:46

Время одиночных разработчиков и микрокоманд: как ИИ съел оргструктуру +11

10:16

Призрак в машине: ИИ-подделка и аура в эпоху алгоритмической воспроизводимости +9

ОБСУЖДАЕМОЕ

  • Про Лысенко, Вавилова, письмо трёхсот и генетику в СССР +42

    • 103   11000

    Предварительный взгляд на 3I/ATLAS с Марса +29

    • 79   42000

    Цифровая зависимость: почему проприетарный софт — тупик для человечества? +4

    • 64   2200

    Go, Rust или всё же C++? Куда мы переписываем наш высоконагруженный бэкенд в 2025 +23

    • 63   17000

    Тайна самой дешевой консоли с Ozon +166

    • 53   42000

    Пайплайн цифрового фотографа на LINUX +70

    • 47   4700

    Атом смысла: как из ничего получить все +20

    • 44   5900

    Гипотеза Коллатца как фейл мировой математики (окончание) -1

    • 44   8500

    Большой FAQ про Wi-Fi +33

    • 41   15000

    Ледокол для Человечества: Может ли общая идея построить мост над пропастью? +5

    • 40   2300

    Zip-бомбы против агрессивных ИИ-краулеров +43

    • 34   8900

    Лабораторный блок питания с плавной регулировкой, цифровым дисплеем и дополнительными выходами USB +12

    • 33   8400

    Pentax MZ-M и другие: как пластиковые камеры чуть не убили пионеров зеркалкостроения +42

    • 31   5600

    Отрезчик термоусадки v2.0 +34

    • 28   4000

    Элементы игрового дизайна и механики, от которых пора избавиться +22

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