📝 Типы ресурсов
Как описано в документации по ресурсам, 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'))
Помогите нам улучшить документацию
Если что-то отсутствует или не совсем понятно, пожалуйста опишите проблему в репозитории сайта или отредактируйте эту страницу.