Создание проекта с использованием Parcel начинается с подготовки
базовой структуры Node.js-проекта. В основе лежит файл
package.json, который описывает зависимости, скрипты и
конфигурацию сборки.
Инициализация выполняется через менеджер пакетов:
npm init -y
После выполнения команды создаётся минимальный
package.json, содержащий стандартные поля проекта.
Ключевые элементы на этом этапе:
Parcel представляет собой сборщик модулей с минимальной конфигурацией. Он устанавливается как dev-зависимость, поскольку используется только в процессе разработки и сборки.
npm install --save-dev parcel
После установки становится доступна CLI-команда parcel,
используемая для запуска dev-сервера и сборки проекта.
Важно учитывать:
Типичная структура проекта с Parcel строится вокруг входной точки, чаще всего HTML-файла.
Пример базовой структуры:
project/
├── package.json
├── src/
│ ├── index.html
│ ├── index.js
│ ├── styles.css
│ └── assets/
│ └── logo.png
src/ — основная директория исходного кода;index.html — точка входа для Parcel;index.js — основной JavaScript-модуль;assets/ — статические ресурсы.Parcel автоматически отслеживает зависимости, начиная с HTML-файла.
Parcel использует HTML как первичный входной файл, из которого строится граф зависимостей.
Пример index.html:
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<title>Parcel проект</title>
<link rel="stylesheet" href="./styles.css" />
</head>
<body>
<div id="app"></div>
<script type="module" src="./index.js"></script>
</body>
</html>
Особенности:
type="module" позволяет
использовать ES Modules;Файл index.js является корневым модулем приложения.
Пример базового содержимого:
import "./styles.css";
const app = document.getElementById("app");
app.textContent = "Parcel работает";
Parcel автоматически:
CSS в Parcel не требует отдельной конфигурации. Достаточно импортировать файл напрямую в JavaScript или подключить через HTML.
Вариант через Jav * aScript:
import "./styles.css";
Пример styles.css:
body {
font-family: Arial, sans-serif;
background: #f5f5f5;
margin: 0;
}
#app {
padding: 20px;
font-size: 18px;
}
Parcel автоматически:
Parcel поддерживает импорт изображений и других ресурсов без дополнительной настройки.
Пример использования изображения:
import logo from "./assets/logo.png";
const img = document.createElement("img");
img.src = logo;
document.body.appendChild(img);
Механизм работы:
Поддерживаются:
Для управления Parcel используется раздел scripts в
package.json.
Пример конфигурации:
{
"scripts": {
"dev": "parcel src/index.html",
"build": "parcel build src/index.html"
}
}
npm run dev
Особенности dev-режима:
npm run build
В режиме сборки:
Parcel строит граф зависимостей начиная с entry-файла. Каждый импорт становится узлом графа.
Процесс включает:
Особенность архитектуры:
Parcel поддерживает Hot Module Replacement без дополнительной настройки.
Пример поведения:
Пример кода с поддержкой HMR:
if (module.hot) {
module.hot.accept();
}
Хотя в большинстве случаев Parcel обрабатывает HMR автоматически.
Parcel использует встроенные трансформеры для поддержки современного JavaScript.
Поддерживаются:
Пример динамического импорта:
button.addEventListener("click", async () => {
const module = await import("./lazy.js");
module.init();
});
Parcel автоматически выделяет такой код в отдельный бандл.
HTML в Parcel рассматривается как полноценный модуль.
Возможности:
Пример вложенности:
<link rel="stylesheet" href="./styles.css" />
<script type="module" src="./index.js"></script>
Parcel анализирует и включает зависимости в граф сборки.
Parcel работает по принципу zero-config, однако поддерживает расширение через конфигурационные файлы при необходимости.
Основные сценарии расширения:
.babelrc;postcss.config.js;.parcelrc для кастомных
трансформеров.Пример .parcelrc:
{
"extends": "@parcel/config-default"
}
Parcel активно использует кэширование для ускорения сборки.
Особенности:
Это особенно заметно в больших проектах, где повторные сборки выполняются значительно быстрее первоначальных.
Parcel использует worker threads для параллельной обработки модулей.
Этапы, выполняемые параллельно:
Это снижает время сборки при увеличении количества файлов.