Parcel рассматривает мультимедийные ресурсы как полноценные модули
приложения. Аудио и видео файлы подключаются напрямую через
import, обрабатываются сборщиком и автоматически
оптимизируются в процессе сборки. Такой подход исключает необходимость
ручной настройки загрузчиков в большинстве сценариев и делает интеграцию
медиа предсказуемой и унифицированной.
Parcel поддерживает импорт аудио- и видеофайлов из JavaScript, TypeScript, CSS и HTML. При импорте файл рассматривается как зависимость, которая проходит через систему трансформаций и получает итоговый публичный URL.
import sound from './assets/click.mp3';
import trailer from './assets/intro.mp4';
После сборки переменные sound и trailer
содержат строки с конечными URL:
/dist/click.8f3a1c.mp3
/dist/intro.91bd77.mp4
Parcel автоматически:
Аудио чаще всего используется через стандартный Web Audio API или HTMLAudioElement.
import clickSound from './assets/click.mp3';
const audio = new Audio(clickSound);
function playClick() {
audio.currentTime = 0;
audio.play();
}
Parcel не требует дополнительной настройки для обработки
.mp3, .wav, .ogg и других
распространённых форматов, если браузер их поддерживает.
Видео подключаются аналогично аудио, поскольку Parcel трактует их как статические ресурсы.
import introVideo from './assets/intro.mp4';
const video = document.createElement('video');
video.src = introVideo;
video.controls = true;
video.autoplay = false;
document.body.appendChild(video);
При таком подходе Parcel:
Parcel позволяет подключать медиафайлы напрямую в HTML через относительные пути, которые также проходят обработку сборщиком.
<audio src="./assets/click.mp3" controls></audio>
<video src="./assets/intro.mp4" controls></video>
При сборке Parcel:
Parcel не ограничивает список форматов на уровне конфигурации, а полагается на возможности браузера и систему трансформаций.
Поддержка конкретного кодека определяется средой выполнения, а не сборщиком.
Parcel не перекодирует аудио и видео по умолчанию, но обеспечивает инфраструктуру для интеграции с оптимизаторами через плагины.
Основные уровни оптимизации:
Каждый медиафайл получает уникальный хэш:
video.3f2a91.mp4
sound.91c8de.mp3
Это обеспечивает:
При динамическом импорте Parcel выносит медиа в отдельные чанки.
const loadVideo = async () => {
const videoSrc = await import('./assets/intro.mp4');
return videoSrc.default;
};
Такой подход позволяет:
Видео и аудио часто используются в ленивых компонентах.
function createPlayer() {
import('./assets/background.mp3').then(({ default: music }) => {
const audio = new Audio(music);
audio.loop = true;
audio.play();
});
}
Parcel автоматически разбивает такие ресурсы на отдельные чанки.
Parcel не вмешивается в работу браузерных API, поэтому управление видео осуществляется стандартными средствами.
import movie from './assets/movie.mp4';
const video = document.querySelector('video');
video.src = movie;
video.muted = true;
video.playsInline = true;
video.addEventListener('loadeddata', () => {
video.play();
});
Особенности:
preload атрибутом.Аудио напрямую в CSS не применяется, однако видео может использоваться как фон.
.hero {
background: url('./assets/preview.mp4');
}
Parcel преобразует ссылку в корректный URL и учитывает файл в сборке.
Для фоновых видео чаще используется HTML-элемент
<video>, но Parcel одинаково обрабатывает оба
варианта.
При работе с медиафайлами важно учитывать возможные ошибки загрузки.
import track from './assets/music.mp3';
const audio = new Audio(track);
audio.addEventListener('error', () => {
console.error('Ошибка загрузки аудиофайла');
});
Parcel гарантирует корректность путей, но не управляет доступностью ресурсов на сервере или поддержкой кодеков.
Видео высокого разрешения могут значительно увеличивать размер сборки. Parcel предоставляет механизмы контроля:
publicUrl;Пример использования внешнего хранилища:
const video = 'https://cdn.example.com/video.mp4';
В этом случае Parcel не обрабатывает файл, оставляя его внешним ресурсом.
Parcel автоматически понимает типы импортируемых файлов, однако в строгих TypeScript конфигурациях может потребоваться декларация модулей.
declare module '*.mp3';
declare module '*.mp4';
После этого импорт становится типобезопасным:
import sound from './assets/sound.mp3';
Parcel не требует дополнительных загрузчиков для медиа в React-компонентах.
import videoSrc from './assets/demo.mp4';
export default function Player() {
return (
<video src={videoSrc} controls />
);
}
Механика остаётся идентичной: файл превращается в URL и передаётся компоненту.
В dev-сервере Parcel:
Аудио и видео файлы подгружаются без дополнительной обработки, что ускоряет цикл разработки.
Parcel использует контентно-адресуемое кеширование. Изменение любого байта в медиафайле приводит к новому хэшу.
Это означает:
audio.1a2b3c.mp3 → audio.9d8e7f.mp3
Parcel не реализует потоковую передачу самостоятельно, но корректно поддерживает работу браузерных механизмов:
preload="metadata" для видео;preload="auto" для аудио;<video src="./assets/film.mp4" preload="metadata" controls></video>
Типичная структура:
src/
assets/
audio/
click.mp3
theme.ogg
video/
intro.mp4
trailer.webm
Parcel не требует отдельной конфигурации для такой структуры и автоматически учитывает все зависимости при импорте.
Аудио и видео часто используются совместно с изображениями и шрифтами. Parcel строит единый граф зависимостей, где каждый ресурс имеет равный статус.
import sound from './audio/click.mp3';
import poster from './img/poster.png';
import video from './video/intro.mp4';
Все ресурсы проходят одинаковый pipeline обработки: обнаружение → трансформация → хэширование → выдача URL.