Если вы не хотите заниматься настройкой окружения, а хотите сразу перейти к урокам по react-router'у, возьмите этот .
Что мы получим в итоге?
React + перезагрузка страницы при возникновении изменений в коде компонентов (стилей в том числе)
(и в качестве примера добавления библиотеки. В учебнике jQueryне используется)
Возможность писать ES2015/ES7 код
Линтинг (проверку) нашего кода с помощью
Наброски для development и production версий.
Текст ниже не является обязательным для прочтения, достаточно скачать архив и выполнить npm install. В будущем мы установим , поэтому вы точно ничего не "потеряете".
За основу был взят проект .
Изменения/Обновления
В процессе написания учебника "случился" отпуск. Да и новые версии выходят постоянно. Я старался обновляться по мере возможностей или в силу необходимых обстоятельств. Ниже будет список.
webpack в хроме выдавал слишком много "предупреждений" (из-за source maps). Обновился до webpack@1.13.0
Обратите внимание, в списке зависимостей нет ни react-router, ни даже redux, зато есть jQuery и Bootstrap. Собственно, jQuery - это зависимость Bootstrap. Реакт-роутер и редукс будут добавлены позже, как и другие необходимые пакеты.
Начнем распутывать "клубок".
Как видно из package.json приложение будем "стартовать" командой npm start, которая в свою очередь выполнит node bin/server.js
bin/server.js
var fs = require('fs');
var babelrc = fs.readFileSync('./.babelrc');
var config;
try {
config = JSON.parse(babelrc);
} catch (err) {
console.error('==> ERROR: Error parsing your .babelrc.');
console.error(err);
}
require('babel-core/register')(config);
require('../server');
Благодаря такой "обертке" мы убьем сразу несколько зайцев:
сможем выдавать красивое сообщение об ошибке, если не хватает какого-то из babel-preset'ов
сможем код файла по адресу ../server относительно текущего (напомню, текущий - это bin/server.js) писать на ES2015
Давайте создадим "этот самый файл" по адресу ../server.
В данном конфиге меня заинтересовали последние строчки. Посмотрите как происходят присваивания в переменную TARGET.
Если мы запускаем npm start - наш финальный конфиг будет равен текущему конфигу (webpack/common.config + webpack/dev.config)*.
Если же мы запустим npm build (у нас нет этого скрипта сейчас), то запустится сборка, которая возьмет текущий конфиг и "смержит" его с production конфигом.
Ниже приведен код dev и prod конфигов. Если интересно - посмотрите различия.
import 'babel-polyfill'
import React from 'react'
import { render } from 'react-dom'
import App from './containers/App'
render(
<App />,
document.getElementById('root')
)
src/containers/App.js
import React, { Component } from 'react'
export default class App extends Component {
render() {
return <div className='container'>Привет из App!</div>
}
}
Ракета готова к запуску? На старт, внимание... npm install.
Теперь точно готова ;)
Проверьте, npm start (каждая первая сборка webpack после его остановки занимает продолжительное время (~6 секунд), последующие "пересборки" значительно быстрее)
Откройте браузер (обратите внимание так же и на css, должен примениться bootstrap-стиль к классу .container)
Итого: мы настроили рабочее окружение.
Вопросы:
Что хранится в свойстве process.env.npm_lifecycle_event?
Где можно посмотреть правила для тонкой настройки ESLint?
Что обозначают цифры 0, 1, 2 напротив правила в конфигурационном файле ESLint?
Ответы:
Что хранится в свойстве process.env.npm_lifecycle_event ?
----------
Где можно посмотреть правила для тонкой настройки ESLint?
----------
Что обозначают цифры 0, 1, 2 напротив правила в конфигурационном файле ESLint?
0 - правило отключено
1 - правило включено, если нарушение выявлено - выведет warning
2 - правило включено, если нарушение выявлено - выведет error
Код выше - это вполне стандартный конфиг сервера на .
Отмечу, что здесь мы подключаем конфиг посредством:
* под "+" подразумевается "мерж" (слияние) с помощью *
Зачем это в данном туториале? Я посчитал, что раз вы решили прочесть "ручную" настройку - вам будет интересно посмотреть на вариант сборки с использованием dev/prod версий. Если я прав - посмотрите как устроена секция scripts .
Не забывайте про правило . Если вы предпочитаете использовать двойные кавычки, то оно должно выглядеть так:
Список всех правил можно посмотреть на линтера.
на данный момент.
Переменная (variable), которую вы указали в качестве npm variable. Подробнее .