Существует множество инструментов для создания шаблонного кода, доступного для reactjs. Самым популярным инструментом, используемым многими разработчиками, является create-react-app, который имеет множество параметров конфигурации.
Содержание
- Введение в babel и webpack
- Настройка webpack
- Использование babel с webpack
- Использование css и загрузчика файлов с веб-пакетом
- Использование сервера webpack dev
Вступление
Это руководство покажет, как создать собственный проект React с помощью babel и webpack. Мы должны настроить webpack на использование babel для компиляции jsx в js и запустить сервер разработки для обслуживания скомпилированных файлов.
Webpack
Webpack используется для компиляции модулей JavaScript. После установки вы можете взаимодействовать с webpack через его CLI или API. Если вы все еще новичок в webpack, прочтите основные концепции и это сравнение, чтобы узнать, почему вы можете использовать его по сравнению с другими инструментами, доступными в сообществе.
Webpack принимает все наши зависимости и преобразует их в статические ресурсы, чтобы их можно было обслуживать клиенту. Объединение очень важно, потому что большинство браузеров ограничивают количество запросов ресурсов 6 или 7 запросами. Объединение помогает нам избежать отправки ненужных модулей в качестве бонуса. Webpack использует внутренний кеш для загрузки модуля только один раз, и драгоценная пропускная способность сохраняется, что сокращает время загрузки.
Вавилон
Babel - это набор инструментов, который в основном используется для преобразования кода ECMAScript 2015+ в обратно совместимую версию JavaScript в текущих и старых браузерах или средах .abel может преобразовывать синтаксис JSX! Ознакомьтесь с нашим пресетом React, чтобы начать
Babbel используется для преобразования jsx в js. JSX - это краткий синтаксис javascript XML, который предоставляет нам простой способ написания кода реакции.
import React from "react"; function App(props){ return( <div> <b>Hello world!</b> </div> ) }
С использованием jsx легко читать и писать код реакции. Вот пример кода без jsx.
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require("react"); var _react2 = _interopRequireDefault(_react); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function App(props) { return _react2.default.createElement( "div", null, _react2.default.createElement( "b", null, "Hello world!" ) ); } exports.default = App;
Этот код очень трудно читать, и он более подвержен ошибкам, тогда как jsx предоставляет нам хороший HTML-подобный синтаксис.
Требования
Чтобы настроить наш проект, нам потребуются эти модули npm
- react библиотека реакции
- react-dom эта библиотека помогает нам использовать React в браузере
- @ babel / core используется для преобразования jsx в js.
- @ babel / preset-env использовался для настройки транспилятора для старого браузера.
- @ babel / preset-react используется для настройки транспайлера на реакцию.
- babel-loader используется для настройки веб-пакета для использования babel
- css-loader используется для настройки веб-пакета для компиляции css.
- webpack используется для объединения всех модулей
- webpack-cli используется для запуска webpack из cli
- style-loader загружает все CSS в заголовок HTML.
- webpack-dev-server использовался для обслуживания скомпилированного файла.
Мы можем использовать npm или yarn для установки этих зависимостей.
npm install --save-dev @babel/core @babel/preset-env @babel/preset-react babel-loader css-loader webpack webpack-cli style-loader webpack-dev-server
В корне проекта находится папка src с файлом ввода index.js.
Папка components
содержит все компоненты проекта, а dist
folder - весь скомпилированный код.
Совет: делитесь компонентами между проектами с помощью Bit
Bit упрощает совместное использование и повторное использование независимых компонентов в проектах .
Битовые компоненты можно поддерживать и разрабатывать независимо, поэтому вам не нужно беспокоиться о структурировании полноценной среды разработки только для того, чтобы внести несколько изменений.
Используйте Bit для более эффективного сотрудничества и сохранения единообразия дизайна во всех веб-проектах.
Давайте настроим веб-пакеты
Веб-пакеты - это чрезвычайно настраиваемая часть программного обеспечения, мы можем передавать аргументы команде cli или создавать файл конфигурации с именем webpack.config.js
. Мы должны экспортировать объект со свойством конфигурации.
{ entry: "./src/index.js", mode: "development", output: { filename: "./main.js" }, }
entry
указывает корень исходного кода проекта. mode
указывает тип среды для компиляции и указывает, где должен быть размещен скомпилированный файл.
Создание нашего образца проекта
В нашем проекте есть index.html в папке dist, а структура HTML такова:
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>React From Scratch</title> </head> <body> <div id="root"> </div> </body> <script type="text/javascript" src="/main.js"> </script> </html>
HTML содержит тег script
, указывающий на наш основной скомпилированный файл, и когда файл компилируется, он включается в HTML. Затем мы должны установить пакеты react и react-dom.
npm install react react-dom
Теперь index.js, который стандартно реагирует на рендеринг файла.
import React, { Component } from "react"; import ReactDOM from "react-dom"; import App from "./component/app.component"; ReactDOM.render(<App />, document.querySelector("#root"));
app.component.js
import React, { Component } from "react"; import s from "./app.component.css"; class MyComponent extends Component { render() { return <div className={s.intro}>Hello World</div>; } } export default MyComponent;
app.component.css
.intro { background-color: yellow; }
Настройка babel
Babel настраивается с использованием предустановок, которые можно использовать для преобразования практически любой веб-технологии, включая сокращение в css, jsx в js, машинописный текст в js и многое другое. Мы бы использовали только две предустановки react
и env
. Мы можем настроить babel с помощью cli, файла или файла package.json, мы будем использовать package.json для конфигурации. Предустановки похожи на модули, которые помогают переводить один язык на другой.
"babel": { "presets": [ "@babel/env", "@babel/react" ] }
Мы бы добавили эти строки в файл package.json, это сообщило бы babel, что эти предустановки следует использовать для транспиляции. Теперь нам нужно настроить webpack для использования babel.
Настройка WebPack для Babel и других загрузчиков
Теперь мы будем использовать babel-loader
для использования babel с webpack, а webpack предоставляет нам хуки для обработки файлов до их обработки, и они называются модулями и их легко настроить.
Использование файлов JS
module: { rules: [ { test: /\.m?js$/, exclude: /(node_modules|bower_components)/, use: { loader: "babel-loader" } }, ] }
Правила представляют собой массив, используемый для определения того, что следует делать при обнаружении этого типа файла. Ключ test
определяет регулярное выражение для файла, мы используем его, чтобы выбрать все файлы с расширением .m
и .js
и исключить папку node_module и bower_components, потому что мы не знаем, что транспилировать файлы node_module, тогда мы указываем используемый загрузчик babel . Теперь наши файлы javascript будут скомпилированы babel, а затем обработаны веб-пакетом.
Использование файлов CSS
module: { rules: [ { test: /\.m?js$/, exclude: /(node_modules|bower_components)/, use: { loader: "babel-loader" } }, { test: /\.css$/, use: [ "style-loader", { loader: "css-loader", options: { modules: true } } ] }, ] }
Для этой задачи мы будем использовать style-loader и css-loader. Ключ использования также может принимать массив объектов или строку. Загрузчики запускаются от последнего к первому, поэтому наш файл сначала попадает в css-loader, мы указали возможность использования модулей, которые делают наш css эксклюзивным для единственного компонента, в который он импортируется. Загрузчик css разрешит весь импорт в файлах css, а затем загрузчик стиля добавит их в виде тега стиля в заголовке.
<style> <-- your css --> </style>
Использование статических ресурсов
module: { rules: [ { test: /\.m?js$/, exclude: /(node_modules|bower_components)/, use: { loader: "babel-loader" } }, { test: /\.css$/, use: [ "style-loader", { loader: "css-loader", options: { modules: true } } ] }, { test: /\.(png|svg|jpg|gif)$/, use: ["file-loader"] } ] }
Если мы встретим файл png, svg, jpg или gif, мы будем использовать файл-загрузчик для обработки этих файлов. Очень важно аккуратно обращаться с этими файлами и оптимизировать механизм загрузки файлов.
Запуск сервера разработки
devServer: { contentBase: path.join(__dirname, "dist"), compress: true, port: 9000, watchContentBase: true, progress: true },
Модуль предоставляет нам очень простой и настраиваемый метод запуска нашего сервера разработки. contentBase
точка входа для наших скомпилированных ресурсов - index.html port
сообщает, какой порт прослушивает сервер. watchContentBase
очень интересен, он сообщает серверу следить за изменениями в каталоге файлов в папке contentBase.
Пусть запускается сервер, использующий файл package.json.
"scripts": { "dev": "webpack-dev-server", "start": "webpack" },
Теперь мы можем запустить npm run dev
для запуска нашего веб-сервера.
Заключение
Это просто обзор того, как мы можем настроить webpack и babel для reactjs. Это всего лишь верхушка айсберга, вы можете настроить это так, чтобы использовать меньше вместо css или машинописный текст вместо js, минимизировать файлы css и т. Д.
- Вы должны использовать загрузчик для каждого типа файлов, которые вы используете.
- Теперь мы можем использовать любую технологию с веб-пакетом, используя такие загрузчики, как less, typescript, jsx.
- Когда вы настраиваете свой собственный проект реакции, его довольно легко настроить и оптимизировать, а также обновить зависимость.
Бонус
Все примеры для вас;)