Parcel — это современный сборщик (bundler) для веб-приложений, предназначенный для автоматической обработки и объединения ресурсов проекта. Он анализирует зависимости между файлами, преобразует исходный код, оптимизирует ресурсы и формирует готовую сборку для запуска в браузере.
Главной особенностью Parcel является подход «zero configuration» — возможность начать работу практически без предварительной настройки. В большинстве случаев достаточно установить пакет и запустить команду сборки.
Parcel поддерживает:
Современные приложения состоят из множества файлов:
Браузер может загружать такие файлы отдельно, однако это приводит к ряду проблем:
Сборщик решает эти проблемы путем:
Parcel автоматизирует большинство этих задач.
В отличие от многих других сборщиков, Parcel способен работать практически сразу после установки.
Пример запуска:
npm install --save-dev parcel
parcel src/index.html
Без дополнительной настройки будут обработаны:
Parcel использует:
Это значительно сокращает время пересборки проекта.
Parcel самостоятельно обнаруживает:
import './style.css';
import logo from './logo.png';
import { sum } from './utils.js';
Все необходимые файлы автоматически включаются в граф сборки.
Из коробки поддерживаются:
Создание проекта:
mkdir parcel-project
cd parcel-project
npm init -y
Установка Parcel:
npm install --save-dev parcel
После установки пакет появляется в разделе зависимостей:
{
"devDependencies": {
"parcel": "^2.x.x"
}
}
Типичная структура приложения:
project/
│
├── src/
│ ├── index.html
│ ├── index.js
│ ├── styles.css
│ └── images/
│ └── logo.png
│
├── package.json
└── .gitignore
<!DOCTYPE html>
<html>
<head>
<title>Parcel App</title>
</head>
<body>
<h1>Parcel Example</h1>
<script type="module" src="./index.js"></script>
</body>
</html>
console.log('Parcel works!');
Запуск:
npx parcel src/index.html
По умолчанию сервер запускается на:
http://localhost:1234
Для удобства создаются команды:
{
"scripts": {
"dev": "parcel src/index.html",
"build": "parcel build src/index.html"
}
}
Запуск режима разработки:
npm run dev
Сборка проекта:
npm run build
Development Mode предназначен для активной разработки.
Команда:
parcel src/index.html
Возможности:
HMR позволяет обновлять модули без полной перезагрузки страницы.
Пример:
if (module.hot) {
module.hot.accept();
}
После изменения файла браузер получает обновлённый код практически мгновенно.
Преимущества:
Файл:
export function multiply(a, b) {
return a * b;
}
Использование:
import { multiply } from './math.js';
console.log(multiply(2, 5));
Parcel автоматически обнаружит зависимость и включит её в сборку.
Импорт стилей возможен непосредственно из JavaScript.
body {
background: #f5f5f5;
}
import './styles.css';
Parcel автоматически:
CSS Modules позволяют создавать локальные классы.
.button {
background: blue;
color: white;
}
import styles from './Button.module.css';
button.className = styles.button;
Parcel генерирует уникальные имена классов.
Пример:
.button_a1f23
Это предотвращает конфликты между стилями.
Установка:
npm install sass
Файл:
$primary: blue;
body {
color: $primary;
}
Импорт:
import './styles.scss';
Parcel автоматически скомпилирует Sass в CSS.
Установка:
npm install less
Файл:
@primary: red;
body {
color: @primary;
}
Parcel самостоятельно обработает Less-файлы.
Импорт изображения:
import logo from './logo.png';
const img = document.createElement('img');
img.src = logo;
document.body.appendChild(img);
Parcel:
SVG может использоваться как обычный ресурс.
import icon from './icon.svg';
Либо напрямую в HTML:
<img src="./icon.svg">
Пример:
@font-face {
font-family: 'Roboto';
src: url('./fonts/Roboto.woff2')
format('woff2');
}
Parcel автоматически включит шрифт в сборку.
Установка:
npm install typescript
Создание файла:
function sum(a: number, b: number): number {
return a + b;
}
console.log(sum(5, 7));
Parcel автоматически распознает файл:
index.ts
и выполнит компиляцию.
Установка React:
npm install react react-dom
Создание компонента:
function App() {
return <h1>Hello Parcel</h1>;
}
export default App;
Точка входа:
import ReactDOM from 'react-dom/client';
import App from './App';
const root = ReactDOM.createRoot(
document.getElementById('root')
);
root.render(<App />);
Parcel автоматически настроит JSX-трансформацию.
Parcel использует Babel для преобразования современного JavaScript.
Исходный код:
const greet = name => `Hello ${name}`;
После сборки код преобразуется в форму, поддерживаемую целевыми браузерами.
Используется поле browserslist.
{
"browserslist": [
"last 2 versions",
"> 1%"
]
}
Parcel будет ориентироваться на указанные браузеры при транспиляции.
Файл:
.env
Содержимое:
API_URL=https://api.example.com
Использование:
console.log(process.env.API_URL);
Parcel автоматически подставит значение переменной.
Команда:
parcel build src/index.html
Во время сборки выполняются:
Tree Shaking удаляет неиспользуемые части модулей.
Модуль:
export function add() {}
export function subtract() {}
export function multiply() {}
Использование:
import { add } from './math.js';
В итоговую сборку попадёт только функция:
add
Остальной код будет исключён.
Code Splitting разбивает приложение на отдельные части.
Пример динамического импорта:
button.addEventListener('click', async () => {
const module = await import('./admin.js');
module.init();
});
Parcel создаст отдельный файл для:
admin.js
который загрузится только при необходимости.
Синтаксис:
const library = await import('./library.js');
Преимущества:
Parcel активно использует кэш.
Каталог:
.parcel-cache
Хранит:
Благодаря этому повторные сборки выполняются значительно быстрее.
Parcel анализирует HTML-файлы как точки входа.
Пример:
<link rel="stylesheet" href="./styles.css">
<script src="./index.js"></script>
Все ресурсы автоматически попадают в граф зависимостей.
Возможен запуск нескольких страниц.
parcel src/*.html
Пример:
src/
├── index.html
├── about.html
└── contacts.html
Parcel сформирует отдельные страницы и общий набор ресурсов.
Во время production-сборки Parcel способен:
Результатом становится уменьшение объёма передаваемых данных.
Source Maps помогают отлаживать код после сборки.
Во время разработки они создаются автоматически.
Благодаря этому в DevTools отображаются оригинальные файлы:
index.js
styles.css
components/Button.jsx
вместо минифицированной версии.
В package.json можно определить псевдонимы путей.
{
"alias": {
"@components": "./src/components",
"@utils": "./src/utils"
}
}
Использование:
import Button from '@components/Button';
Это упрощает навигацию по крупным проектам.
Создание воркера:
const worker = new Worker(
new URL('./worker.js', import.meta.url)
);
Файл воркера:
self.onmess age = e => {
self.postMessage(e.data * 2);
};
Parcel автоматически создаст отдельный бандл для Worker.
Импорт WASM-модуля:
import init from './module.wasm';
await init();
Parcel корректно обработает бинарный ресурс и включит его в сборку.
Основные компоненты системы:
Представляет отдельный ресурс:
Отвечает за преобразование ресурсов.
Примеры:
Формирует конечные бандлы на основе графа зависимостей.
Выполняет оптимизацию ресурсов перед публикацией.
Создаёт итоговые файлы сборки.
Файл:
{
"extends": "@parcel/config-default"
}
Позволяет:
Parcel имеет развитую систему расширений.
Типы плагинов:
С помощью плагинов возможно практически полностью изменить процесс сборки.
| Возможность | Parcel | Webpack |
|---|---|---|
| Настройка | Минимальная | Часто объёмная |
| Скорость старта | Высокая | Средняя |
| Конфигурация | Почти не требуется | Обычно обязательна |
| Простота освоения | Высокая | Средняя |
| Гибкость | Высокая | Очень высокая |
| Экосистема | Большая | Огромная |
Parcel особенно удобен для:
Webpack чаще используется там, где требуется максимально детальная настройка процесса сборки.
parcel.parcel build src/index.html
Parcel представляет собой современный высокопроизводительный инструмент сборки веб-приложений, сочетающий автоматизацию, поддержку актуальных стандартов JavaScript и минимальные требования к конфигурированию, что делает его одним из наиболее удобных решений для разработки клиентских приложений различного масштаба.