📝 Типи ресурсів
Як описано в документації по ресурсам, Parcel представляє кожен вхідний файл в якості Asset
. Типи ресурсів представлені як класи, успадковують від базового класу Asset
, і реалізують необхідний інтерфейс для синтаксичного аналізу, аналізу залежностей, перетворення і генерації коду.
Оскільки Parcel обробляє ресурси паралельно з декількох процесорних ядер, перетворення, які можуть виконувати типи ресурсів, обмежені тими, які працюють з одним файлом одночасно. Для перетворень декількох файлів, може використовуватися для користувацький Пакувальник.
Інтерфейс ресурсу
const {Asset} = require ('parcel-bundler');
class MyAsset extends Asset {
type = 'foo'; // встановлюємо основний тип виведення.
async parse (code) {
// розбір коду в AST.
return ast;
}
async pretransform () {
// перетворити до збору залежностей. (Опціонально)
}
collectDependencies () {
// аналіз залежностей.
this.addDependency ('my-dep');
}
async transform () {
// перетворити після збору залежностей. (Опціонально)
}
async generate () {
// генерація коду, при необхідності ви можете повертати кілька розширень.
// результати передаються відповідним пакувальникам для генерації готових бандлів.
return [
{
type: 'foo',
value: 'my stuff here' // основний висновок
},
{
type: 'js',
value: 'some javascript', // альтернативне виконання для розміщення в JS-бандл, якщо необхідно
sourceMap
}
];
}
async postProcess (generated) {
// Процес після завершення генерації всього коду
// Може використовуватися для об'єднання типів ресурсів
}
}
Реєстрація типу ресурсу
Ви можете зареєструвати свій тип ресурсу, використовуючи метод addAssetType
. Він приймає розширення файлу для реєстрації і шлях до модуля типу ресурсу. Це шлях, а не фактичний об'єкт, щоб він міг передаватися робочим процесам.
const Bundler = require ('parcel-bundler');
let bundler = new Bundler ( 'input.js');
bundler.addAssetType ('.ext', require.resolve ('./MyAsset'));
Help us improve the docs
If something is missing or not entirely clear, please file an issue on the website repository or edit this page.