Обратите внимание: это НЕ статья типа «Введение в React.js». Учитывая, что вы уже знаете, что это такое, я здесь, чтобы поделиться своим опытом настройки React.js с Babel и Webpack на простом примере «Hello world», который поможет вам начать работу.
Я начал свою профессиональную карьеру в качестве разработчика PHP и JavaScript, и я всегда хотел изучить React.js, потому что он был модным, минимальным и решал серьезную проблему во внешнем интерфейсе. Проблема заключалась в том, что это утомительный процесс настройки и список пакетов, которые нужно запомнить. Я никогда не думал, что печать «Hello World» может быть настолько утомительной, поэтому я начал терять интерес после первой попытки.
Через некоторое время Facebook представил инструмент командной строки create-react-app
, который устраняет все проблемы конфигурации, решение в один клик. Я установил его, попробовал, и он мне понравился. Поэтому в свободное время я начал создавать небольшое приложение, чтобы разобраться в нем, и, в конце концов, я начал чувствовать потребность в дополнительной настройке и настройке. Поскольку «create-react-app» абстрагируется от всех основных потребностей конфигурации React.js, продвигаться вперед с этой настройкой оказалось сложно. Я понял, что пришло время научиться трудному пути, которого я так долго пытался избегать.
Итак, я погрузился, начал изучать Webpack и Babel, попытался понять, что они делают и как они связаны с React.js, и постепенно это стало более понятным.
Чтобы узнать больше, я погуглил и обнаружил, что существует множество подходов к созданию приложения React. Я начал экспериментировать с ними и получил комбинированное и общее решение, которое можно читать, использовать повторно и, самое главное, с минимальной конфигурацией (в большинстве случаев разработки приложений). Я намерен поделиться здесь настройкой и объяснить каждую деталь в процессе создания простого «Hello world!» пример. Мы собираемся использовать Babel и Webpack вместе с React для его создания.
Обратите внимание: Webpack и Babel являются зависимостями от разработчиков, т. е. нам не нужны в производственном режиме.
1.1 - Зачем нам Вавилон?
Ответ прост - для последней поддержки синтаксиса ECMAScript (например, ES5, ES6). Сама библиотека React.js настаивает на использовании последних предложений JavaScript для более чистого, менее читаемого и читаемого кода. Но, к сожалению, наши браузеры не понимают большую часть синтаксиса, и здесь нам нужна помощь Babel. Он отвечает за преобразование кода ES5 и ES6 в код, понятный браузеру, в основном с обратной совместимостью. Решает нашу проблему (так что вам нужно знать синтаксис ES5 и ES6 для разработки приложений React.js, если вы этого не сделаете).
Мы собираемся использовать следующие пакеты Babal:
- babel-core: название предполагает, что основной движок плагина babel для работы его зависимых компонентов.
- babel-preset-env: это часть поддержки ES5 и ES6.
- babel-preset-react: Babel можно использовать в любом фреймворке, которому требуется новейшая поддержка синтаксиса JS, в нашем случае это «React», отсюда и этот пресет.
- babel-loader: считайте это мостом для связи между Webpack и Babel.
1.2 - Зачем нужен Webpack?
Что ж, нам не обязательно нужен webpack для работы с React, другими альтернативами могут быть Browserify, Parsel, Brunch и т. Д., Но, честно говоря, я не знаю, насколько хорошо они подходят для React.js. Webpack - наиболее широко используемый и признанный сборщик модулей и средство выполнения задач в сообществе React.js. Вы найдете решения для большинства проблем, связанных с этим, его сообщество активно. Кроме того, это довольно просто и минимально. Так почему бы не Webpack. Его пакеты нам нужны по следующим причинам:
- webpack: основной плагин webpack как движок для своих иждивенцев.
- webpack-cli: для доступа к некоторым командам webpack через интерфейс командной строки, таким как запуск сервера разработки, создание производственной сборки и т. д.
- webpack-dev-server: минимальный сервер, предназначенный только для разработки на стороне клиента.
- html-webpack-plugin: поможет в создании HTML-шаблонов для нашего приложения.
Поверьте, вам не нужно запоминать все эти плагины, просто пройдите через них один раз и поймите, что они делают. К концу этой статьи все они будут у вас в голове.
2.1— Итак, приступим к созданию приложения.
Предполагая, что в вашей системе установлен Node.js и команды npm доступны через ваш терминал.
Допустим, наш текущий каталог - c:\
- Создайте в нем каталог нашего приложения
"app"
иcd app
. Теперь мы внутри директорииc:\app
npm init
и завершите процесс.package.json
должен быть создан внутри (текущего)app
каталога- Установите наши основные (зависимости) пакеты React
npm i -S react react-dom
Как видите, есть 2 пакета,react
, очевидно, является основным движком фреймворка React.js, и поскольку мы собираемся создать приложение для браузеров, мы используемreact-dom.
. Мы бы использовалиreact-native
, если бы мы создавали мобильные приложения (что не в нашем случае). - Установите пакеты Babel как зависимость для разработчиков, как описано выше в пункте 1.1
npm i -D babel-core babel-loader babel-preset-env babel-preset-react
Babel потребуется небольшая часть конфигурации, мы сделаем это позже.
- Установите пакеты Webpack как зависимости разработчика, упомянутые в пункте 1.2
npm i -D webpack webpack-cli webpack-dev-server html-webpack-plugin
Webpack требует небольшой настройки, которую мы сделаем позже.
В package.json
dependencies
и devDependencies
должны выглядеть так.
{ “name”: “client”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “”, “build”: “” }, “author”: “Austin4Silvers”, “license”: “ISC”, “dependencies”: { “react”: “¹⁶.4.1”, “react-dom”: “¹⁶.4.1” }, “devDependencies”: { “babel-core”: “⁶.26.3”, “babel-loader”: “⁷.1.5”, “babel-preset-env”: “¹.7.0”, “babel-preset-react”: “⁶.24.1”, “html-webpack-plugin”: “³.2.0”, “webpack”: “⁴.16.2”, “webpack-cli”: “³.1.0”, “webpack-dev-server”: “³.1.5” } }
И один большой шаг позади! Этап установки. Наш следующий шаг - создать файлы конфигурации, которые будут действовать как привязка к Webpack и Babel, предоставляя им необходимую информацию, с которой они должны работать.
3.1 - Настройка Babel
Учитывая, что вы находитесь в c:\app
, создайте файл .babelrc
здесь, обратите внимание, что имя файла должно быть точно таким же, а содержимое этого файла должно быть следующим:
{"presets":["env", "react"]}
Это файл конфигурации, который ищет babel. Помните, у нас было 2 предустановки babel, установленных на шаге: 4 в разделе: 2.1? Эти пресеты следует упомянуть здесь, чтобы Babel знал.
3.2 - Настройка Webpack
Учитывая, что вы находитесь в каталоге c:\app
, создайте файл webpack.config.js
, обратите внимание, что имя файла должно быть таким же, его содержимое будет следующим:
01| const path = require(‘path’); 02| const HWP = require(‘html-webpack-plugin’); 03| module.exports = { 04| entry: path.join(__dirname, ‘/src/index.js’), 05| output: { 06| filename: ‘build.js’, 07| path: path.join(__dirname, ‘/dist’)}, 08| module:{ 09| rules:[{ 10| test: /\.js$/, 11| exclude: /node_modules/, 12| loader: ‘babel-loader’ 13| }] 14| }, 15| plugins:[ 16| new HWP( 17| {template: path.join(__dirname,‘/src/index.html’)} 18| ) 19| ] 20| }
Давайте пройдемся по этому webpack.config.js
файлу.
- Строка № 04 указывает начальную точку приложения. В нашем случае
index.js
находится внутриc:\app\src
каталога, поэтому создайтеsrc
каталог внутриapp
и создайте новый файлindex.js
. Не будем пока ничего помещать внутрь файла. К настоящему времени у вас должен быть пустой файлc:\app\src\index.js
- Точно так же создайте другой файл в том же каталоге
c:\app\src
и назовите егоindex.html
, пока оставьте файл пустым. Этот файл будет действовать как файл шаблона. Помните, что React.js наиболее известен тем, что создает одностраничные приложения. Итак, вы видите, что это основной HTML-файл шаблона, и предполагается, что содержимое внутри этого файла время от времени меняется всякий раз, когда это необходимо или когда пользователь запрашивает изменение представления. Для реализации этой концепции мы используем пакетhtml-webpack-plugin
, который импортируется в Строке №02. - Строки с № 05 по № 07 В этом разделе мы определили - в производственной среде, каким должно быть имя основного файла (build.js) и где он будет автоматически создан (внутри
c:\app\dist
). - Строки с №8 по №14 В этом разделе внутри
module
нам нужно определитьrules
веб-пакет, к которому нужно привязать.
Правила в №10, №11, и # 12 указывает webpack искать все.js
файлы, за исключением файлов внутри каталогаnode_modules
, с целью переноса кодов ES5, ES6 и использовать для этой цели загрузчик с именемbabel-loader
. - Строка №15 - №19 - плагины. Если вы используете какие-либо другие плагины, которые необходимо знать Webpack для объединения или транспиляции, вам необходимо нажать ссылку плагина в этом массиве.
Вторая и последняя настройка завершена! Теперь единственное, что у нас осталось, это отображение «Hello world!».
Помните, в разделе 3.2, пункте 1 мы создали два файла index.html
и index.js
и оставили их пустыми?
Начнем с добавления содержимого в c:\app\src\index.html
файл:
<!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8"> <meta name=”viewport” content=”width=device-width, initial-scale=1.0"> <meta http-equiv=”X-UA-Compatible” content=”ie=edge”> <title>React app</title> </head> <body> <div id=”root”></div> </body> </html>
Примечание. Единственная важная часть, на которую следует обратить внимание, - это <div>
с идентификатором root
. Неважно, насколько большим будет ваше приложение, все, что вы увидите в браузере, будет находиться внутри этого div.
Затем давайте добавим React-часть приложения в файл c:\app\src\index.js
01| import React from ‘react’; 02| import ReactDOM from ‘react-dom’; 03| const App = () => ( 04| <div> 05| <h1>Hello world!!</h1> 06| </div> 07| ) 08| ReactDOM.render(<App/>, document.getElementById(‘root’));
Если вы посмотрите на раздел 3.2 (настройка веб-пакета), в webpack.config.js
мы проинформировали веб-пакет, что этот файл index.js
внутри \src
каталога является точкой входа в приложение (строка # 4 файла webpack.config.js)
и
Использовать index.html
внутри \src
каталога в качестве основного файла шаблона.
Основная часть файла - это строка # 08. render()
функция определена в пакете react-dom
, который отвечает за отрисовку компонентов в браузере. Эта строка указывает react-dom
отобразить компонент <App/>
в элементе DOM с id="root"
Строка с №03 по №07 - const Приложение - это функция, которая возвращает «Hello world ” внутри div
(к сведению: этот странный XML-код внутри функции JS называется синтаксисом JSX, если вы впервые используете React.js), который отображается в <div id="root"></div>
, определенном в c:\app\src\index.html
.
Приложение готово! Теперь все, что нам нужно сделать, это запустить webpack-dev-server
, чтобы увидеть наш «Hello world». Для этого откроем файл package.json
из c:\app\package.json
и обновим в нем индекс «скрипты»:
“scripts”: { “start”: “webpack-dev-server --mode development --open --hot”, “build”: “webpack --mode production” },
Это говорит: если мы запускаем npm start
, webpack-dev-server
запускает приложение в режиме = разработка, а затем отображает (- открыть) его в ваш браузер по умолчанию автоматически и следите за любыми изменениями, внесенными в приложение (- hot).
Когда запускается npm run build
, используйте webpack
для создания готового к работе построить в c:\app\dist
каталог. Выполнено!
Вот пример, на который вы ссылаетесь:
https://github.com/SiddharthaChowdhury/react-app-example