Nota: Está página habla de Parcel 1, la documentación para Parcel 2 aún se tiene que escribir.

📝 Tipos de Recursos

Como se describe en la documentación de recursos, Parcel representa cada archivo de entrada como un Asset. Los tipos de recursos se representan como clases que heredan de la clase base Asset e implementan la interfaz requerida para procesar, analizar dependencias, transformar y generar código.

Debido a que Parcel procesa los recursos en paralelo en múltiples núcleos de procesador, las transformaciones que pueden realizar los tipos de recursos están limitadas a las que operan en un solo archivo a la vez. Para transformaciones en varios archivos se puede usar un Empaquetador personalizado.

Interfaz de Recursos

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

class MyAsset extends Asset {
  type = 'foo' // establecer el tipo de salida principal

  parse(code) {
    // convertir el codigo a un AST
    return ast
  }

  pretransform() {
    // opcional. transformar antes de recolectar dependencias.
  }

  collectDependencies() {
    // analizar dependencias
    this.addDependency('my-dep')
  }

  transform() {
    // opcional. transformar después de recolectar dependencias.
  }

  generate() {
    // generar código. Puedes devolver varias representaciones si lo necesitas.
    // los resultados son enviados al empaquetador apropiado para generar los paquetes finales.
    return {
      foo: 'my stuff here', // salida principal
      js: 'some javascript' // representación alternativa para ser colocada en el paquete de JS si es necesario.
    }
  }
}

Registrando un tipo de Recurso

Puedes registrar tus tipos de recursos con un paquete usando el método addAssetType. Este acepta una extensión de archivo, y la ruta a tu módulo de tipo de recurso. Esta es una ruta en lugar del objeto real para que pueda ser enviado a procesos paralelos de trabajo.

const Bundler = require('parcel-bundler')

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

Ayudanos a mejorar la documentación

Si hay algo que falta o no está del todo bien explicado abre un issue en el repositorio de la página o edita esta página.