Настраиваем dev-окружение
Если вы не хотите заниматься настройкой окружения, а хотите сразу перейти к урокам по react-router'у, возьмите этот исходный код.
Что мы получим в итоге?
React + перезагрузка страницы при возникновении изменений в коде компонентов (стилей в том числе)
Возможность писать ES2015/ES7 код
Линтинг (проверку) нашего кода с помощью ESLint
Наброски для development и production версий.
Текст ниже не является обязательным для прочтения, достаточно скачать архив и выполнить npm install. В будущем мы установим react-router, поэтому вы точно ничего не "потеряете".
За основу был взят проект redux-easy-boilerplate.
Изменения/Обновления
В процессе написания учебника "случился" отпуск. Да и новые версии выходят постоянно. Я старался обновляться по мере возможностей или в силу необходимых обстоятельств. Ниже будет список.
webpack в хроме выдавал слишком много "предупреждений" (из-за source maps). Обновился до
webpack@1.13.0обновил 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:


Создадим index.html, точку входа для скриптов (index.js), а так же компонент <App />.
index.html
src/index.js
src/containers/App.js
Ракета готова к запуску? На старт, внимание... npm install.
Теперь точно готова ;)
Проверьте, npm start (каждая первая сборка webpack после его остановки занимает продолжительное время (~6 секунд), последующие "пересборки" значительно быстрее)
Откройте браузер (обратите внимание так же и на css, должен примениться bootstrap-стиль к классу .container)

Итого: мы настроили рабочее окружение.
Исходный код на данный момент.
Вопросы:
Что хранится в свойстве
process.env.npm_lifecycle_event?Где можно посмотреть правила для тонкой настройки ESLint?
Что обозначают цифры 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?