📝 Типы ассетов

Как описано в документации ассетов, Parcel представляет каждый входной файл как Ассет. Типы активов представлены как классы, наследующиеся от базового Ассет класса и и реализации требуемого интерфейса для синтаксического анализа, анализа зависимостей, трансформации и генерации кода.

Так как Parcel обрабатывает ассеты параллельно по нескольким процессорным ядрам, трансформации, которые могут выполнять типы ассетов, ограничены теми, которые работают в одном файле за раз. Для преобразований по нескольким файлам, используйте кастомный Упаковщик.

Интерфейс ассета

const {Asset} = require('parcel-bundler');

class MyAsset extends Asset {
  type = 'foo'; // устанавливаем основной тип вывода.

  parse(code) {
    // парсинг кода в AST.
    return ast;
  }

  pretransform() {
    // (опционально) преобразовать до сбора зависимостей.
  }

  collectDependencies() {
    // анализ зависимостей.
    this.addDependency('my-dep');
  }

  transform() {
    // (опционально) преобразовать после сбора зависимостей.
  }

  generate() {
    // генерация кода, при необходимости вы можете возвращать несколько расширений.
    // результаты передаются соответствующим упаковщикам для создания окончательных бандлов.
    return {
      foo: 'my stuff here', // основной вывод.
      js: 'some javascript' // альтернативное исполнение для размещения в JS бандле, если необходимо.
    };
  }
}

Регистрация типа ассета

Вы можете регистрировать ваш тип ассетов, используя метод addAssetType. Он принимает расширение файла для регистрации и путь к модулю вашего типа ассета. Это путь, а не фактический объект, чтобы он мог передаваться рабочим процессам.

const Bundler = require('parcel-bundler');

let bundler = new Bundler('input.js');
bundler.addAssetType('.ext', require.resolve('./MyAsset'));