Безболезненная настройка разработки для React с помощью Parcel (часть 1)


Безболезненная настройка разработки для React с помощью Parcel (часть 1)

Настройка фронтенд-разработки может быть очень сложной для новичка. Помимо Javascript, CSS и HTML существует слишком много концепций, которые необходимо понять:

  • Какой бандлер выбрать?
  • Зачем нужно транспонировать код?
  • Какие правила линтинга следует применять?
  • Что вообще такое линтер?

Эта серия блогов посвящена созданию установки с минимальным количеством настроек для React с помощью Parcel. Parcel — это компоновщик Javascript, который позиционирует себя как инструмент сборки с нулевой конфигурацией.

Настройка проекта

Исходный код для демонстрации: https://github.com/EthanChenYen-Peng/parcel-react-setup

mkdir parcel-react-setup
cd parcel-react-setup
npm init -y
git init
touch .gitignore
Вход в полноэкранный режим Выход из полноэкранного режима

.gitignore

node_modules/
dist/
.parcel-cache
Войти в полноэкранный режим Выход из полноэкранного режима

Установите Parcel

Установите Parcel как зависимость dev

npm i -D parcel
Войти в полноэкранный режим Выйти из полноэкранного режима

Давайте попробуем это сделать. Сначала создадим файл src/index.html, в который поместим некоторые CSS (src/style.css) и Javascript (src/index.js) и посмотрим, работает ли он.

src/index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="style.css" />
    <title>Document</title>
  </head>
  <body>
    <script type="module" src="index.js"></script>
  </body>
</html>
Войдите в полноэкранный режим Выйдите из полноэкранного режима

src/style.css

#root {
  color: blue;
}
Войдите в полноэкранный режим Выйти из полноэкранного режима

src/index.js

const root = document.createElement('div')
root.id = 'root'
root.textContent = 'Inserted by JS'
document.body.appendChild(root)
Войти в полноэкранный режим Выход из полноэкранного режима

Запустите наш сервер разработки, используя npx parcel src/index.html. Здесь мы указываем Parcel использовать src/index.html в качестве точки входа. За более общим синтаксисом вы можете обратиться сюда.

Все работает, и CSS, и Javascript используются правильно.

Побочное замечание:

Запуск npx commandname автоматически находит правильную ссылку команды в папке node_modules проекта, без необходимости знать точный путь, и не требуя, чтобы пакет был установлен глобально и в пути пользователя.
https://nodejs.dev/learn/the-npx-nodejs-package-runner

Необходимость набиратьnpx parcel src/index.html каждый раз при запуске сервера разработки может отнимать много времени и приводить к ошибкам. К счастью, мы можем использовать сценарий NPM, чтобы сделать нашу команду более декларативной.

  "scripts": {
    "start": "parcel src/index.html",
    "build": "parcel build src/index.html",
  },
Войти в полноэкранный режим Выйти из полноэкранного режима

Для получения дополнительной информации о скриптах NPM я рекомендую прочитать эту статью в блоге
Освоение сценариев NPM.

Чтобы запустить сервер разработки, просто выполните команду npm run start. Примечание: Parcel также предоставляет другой способ указания точки входа с помощью source, который имеет два основных преимущества:

  1. Он принимает массив и может быть полезен в случае наличия нескольких точек входа.
  2. Нам не нужно дублировать точки входа при запуске производственной сборки.
  "source": ["src/index.html"],
  "scripts": {
    "start": "parcel",
    "build": "parcel build"
  },
Вход в полноэкранный режим Выход из полноэкранного режима

Настройка React

Если у вас есть опыт настройки проекта React с помощью Webpack, то вы должны быть немного знакомы с Babel, Javascript-транспайлером, который преобразует написанный вами современный Javascript в версии, понятные старым браузерам. Чтобы использовать современный синтаксис Javascript, обычно требуется установить @babel/preset-env. Кроме того, чтобы использовать JSX в react, необходимо установить @babel/preset-react.

К счастью, Parcel избавляет нас от всех этих проблем, предоставляя встроенный транспилятор с функциями, эквивалентными @babel/preset-env и @babel/preset-react.
https://parceljs.org/languages/javascript/#default-presets

Поэтому, чтобы использовать React, мы просто устанавливаем эти зависимости.

npm i react react-dom
Вход в полноэкранный режим Выйти из полноэкранного режима

Добавьте контейнер div для нашего приложения React в наш index.html. Обратите внимание, что мы также изменили расширение файла на jsx для нашего входного файла Javascript.

<body>
  <div id="app"></div>
  <script type="module" src="index.jsx"></script>
</body>
Вход в полноэкранный режим Выход из полноэкранного режима

Переименуйте нашу точку входа Javascript с src/index.js на src/index.jsx.

import { createRoot } from 'react-dom/client'

function App() {
  return <div>Hello from React</div>
}

const container = document.querySelector('#root')
const root = createRoot(container)

root.render(<App />)
Вход в полноэкранный режим Выйдите из полноэкранного режима

Вот и все. Это все, что нам нужно, чтобы начать работу с React.🤯

Чтобы оценить, как много Parcel делает за сценой, давайте сравним его с базовой настройкой с помощью Webpack.

webpack.config.json

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  entry: path.resolve(__dirname, './src/index.jsx'),
  module: {
    rules: [
      {
        test: /.(ts|js)x?$/,
        exclude: /node_modules/,
        use: ['babel-loader'],
      },
      {
        test: /.css$/,
        use: ['style-loader', 'css-loader'],
      },
    ],
  },
  output: {
    path: path.resolve(__dirname, './build'),
    filename: 'bundle.js',
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: path.resolve(__dirname, './src/index.html'),
    }),
  ],
  mode: 'development',
  devtool: 'cheap-module-source-map',
}
Вход в полноэкранный режим Выход из полноэкранного режима

И необходимые зависимости для разработки.

  "devDependencies": {
    "@babel/preset-env": "^7.17.10",
    "@babel/preset-react": "^7.16.7",
    "babel-loader": "^8.2.5",
    "css-loader": "^6.7.1",
    "html-webpack-plugin": "^5.5.0",
    "style-loader": "^3.3.1",
    "webpack": "^5.72.0",
    "webpack-cli": "^4.9.2",
    "webpack-dev-server": "^4.9.0"
  },
Вход в полноэкранный режим Выход из полноэкранного режима

Как видно, конфигурационный файл в Webpack имеет тенденцию быть очень явным. В Webpack все рассматривается как модуль, и он, по умолчанию, может понимать только JavaScript и JSON файл. Для обработки файлов других типов, кроме этих двух, требуется загрузчик. Здесь мы используем

{
  "presets": ["@babel/preset-env", "@babel/preset-react"]
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Заключение

Parcel представляется отличным бандлером для начинающих. Его функциональность «из коробки» делает его удивительно низким барьером входа для людей, начинающих веб-разработку. Это очень важно, поскольку помимо темы пакетирования активов существует еще слишком много концепций, которые необходимо понять. Тратить слишком много времени на отступление о конфигурации бандлера может быть нецелесообразно.

В следующем посте я настрою линтер и форматер кода, которые очень важны для обеспечения согласованности кода и лучших практик.

Пока.

Оцените статью
Procodings.ru
Добавить комментарий