Настраиваем dev-окружение

Если вы не хотите заниматься настройкой окружения, а хотите сразу перейти к урокам по react-router'у, возьмите этот исходный код.

Что мы получим в итоге?

  • React + перезагрузка страницы при возникновении изменений в коде компонентов (стилей в том числе)

  • BootstrapjQuery в качестве примера добавления библиотеки. В учебнике jQuery не используется)

  • Возможность писать ES2015/ES7 код

  • Линтинг (проверку) нашего кода с помощью ESLint

  • Наброски для development и production версий.

Текст ниже не является обязательным для прочтения, достаточно скачать архив и выполнить npm install. В будущем мы установим react-router, поэтому вы точно ничего не "потеряете".

За основу был взят проект redux-easy-boilerplate.

Изменения/Обновления

В процессе написания учебника "случился" отпуск. Да и новые версии выходят постоянно. Я старался обновляться по мере возможностей или в силу необходимых обстоятельств. Ниже будет список.

  1. webpack в хроме выдавал слишком много "предупреждений" (из-за source maps). Обновился до webpack@1.13.0

  2. обновил react и react-dom

    "react": "^15.0.1",
    "react-dom": "^15.0.1",

Подробнее о настройке

Все как обычно начинается с package.json

Обратите внимание, в списке зависимостей нет ни react-router, ни даже redux, зато есть jQuery и Bootstrap. Собственно, jQuery - это зависимость Bootstrap. Реакт-роутер и редукс будут добавлены позже, как и другие необходимые пакеты.

Начнем распутывать "клубок".

Как видно из package.json приложение будем "стартовать" командой npm start, которая в свою очередь выполнит node bin/server.js

bin/server.js

Благодаря такой "обертке" мы убьем сразу несколько зайцев:

  • сможем выдавать красивое сообщение об ошибке, если не хватает какого-то из babel-preset'ов

  • сможем код файла по адресу ../server относительно текущего (напомню, текущий - это bin/server.js) писать на ES2015

Давайте создадим "этот самый файл" по адресу ../server.

server.js

Код выше - это вполне стандартный конфиг сервера на Express.

Отмечу, что здесь мы подключаем конфиг webpack посредством:

что позволит нам удобно разделить конфиг на production и development версии.

webpack/common.config

В данном конфиге меня заинтересовали последние строчки. Посмотрите как происходят присваивания в переменную TARGET.

Если мы запускаем npm start - наш финальный конфиг будет равен текущему конфигу (webpack/common.config + webpack/dev.config)*.

* под "+" подразумевается "мерж" (слияние) с помощью webpack-merge*

Если же мы запустим npm build (у нас нет этого скрипта сейчас), то запустится сборка, которая возьмет текущий конфиг и "смержит" его с production конфигом.

Ниже приведен код dev и prod конфигов. Если интересно - посмотрите различия.

Версия для "разработки".

webpack/dev.config.js

Версия для "продакшен".

webpack/prod.config.js

Зачем это в данном туториале? Я посчитал, что раз вы решили прочесть "ручную" настройку - вам будет интересно посмотреть на вариант сборки с использованием dev/prod версий. Если я прав - посмотрите как устроена секция scripts здесь.

Ок, немного разобрались. Давайте установим зависимости: npm install

Создадим конфигурационные файлы для babel и ESLint:

.babelrc

.eslintrc

Не забывайте про правило jsx-quotes. Если вы предпочитаете использовать двойные кавычки, то оно должно выглядеть так:

Список всех правил можно посмотреть на официальном сайте линтера.

Напомню, обозначения цифр:

  • 0 - правило отключено

  • 1 - правило включено, если нарушение выявлено - выведет warning

  • 2 - правило включено, если нарушение выявлено - выведет error

Примеры работы ESLint:

eslint warning
eslint error

Создадим index.html, точку входа для скриптов (index.js), а так же компонент <App />.

index.html

src/index.js

src/containers/App.js

Ракета готова к запуску? На старт, внимание... npm install.

Теперь точно готова ;)

Проверьте, npm start (каждая первая сборка webpack после его остановки занимает продолжительное время (~6 секунд), последующие "пересборки" значительно быстрее)

Откройте браузер (обратите внимание так же и на css, должен примениться bootstrap-стиль к классу .container)

app work

Итого: мы настроили рабочее окружение.

Исходный код на данный момент.

Вопросы:

  1. Что хранится в свойстве process.env.npm_lifecycle_event?

  2. Где можно посмотреть правила для тонкой настройки ESLint?

  3. Что обозначают цифры 0, 1, 2 напротив правила в конфигурационном файле ESLint?

Ответы:

Что хранится в свойстве process.env.npm_lifecycle_event ?

  • Переменная (variable), которую вы указали в качестве npm variable. Подробнее здесь.

----------

Где можно посмотреть правила для тонкой настройки ESLint?

----------

Что обозначают цифры 0, 1, 2 напротив правила в конфигурационном файле ESLint?

  • 0 - правило отключено

  • 1 - правило включено, если нарушение выявлено - выведет warning

  • 2 - правило включено, если нарушение выявлено - выведет error

Last updated

Was this helpful?