📝 Tipi di Asset

Come descritto nella Documentazione degli Assets, Parcel rappresenta ogni file come un Asset. I Tipi di Asset sono rappresentati come classi che ereditano da una classe base Asset e implementano l'interfaccia richiesta per effettuare il parse, analizzare le dipendenze, convertire, trasformare e generare il codice.

Parcel elabora le risorse in parallelo su più core di elaborazione e le trasformazioni che i tipi di risorse possono eseguire sono limitate a quelle che operano su un singolo file alla volta. Per utilizzare la conversione su più file, è possibile utilizzare un Packager personalizzato.

Interfaccia degli Asset

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

class MyAsset extends Asset {
  type = 'foo' // imposta il tipo principale di output.

  async parse(code) {
    // Parsing del codice su un AST
    return ast
  }

  async pretransform() {
    // facoltativo. converti prima di collezionare le dipendenze.
  }

  collectDependencies() {
    // analizza le dipendenze
    this.addDependency('my-dep')
  }

  async transform() {
    // facoltativo. trasforma dopo aver collezionato le dipendenze.
  }

  async generate() {
    // genera il codice. è possibile effettuare più esecuzioni, se necessario.
    // vengono passati agli appositi packagers per generare i bundle finali.
    return [
      {
        type: 'foo',
        value: 'my stuff here' // output principale
      },
      {
        type: 'js',
        value: 'some javascript', // esecuzione alternativa, da collocare in un bundle JS se necessario
        sourceMap
      }
    ]
  }

  async postProcess(generated) {
    // Processa dopo aver generato tutto il codice
    // Può essere utilizzato per combinare più tipi di Assets
  }
}

Crea un Tipo di Asset

Si può impostare il proprio tipo di Asset con un bundle usando il metodo "addAssetType". Accetta un'estensione di file per la creazione e il percorso del modulo del tipo di Asset. È in forma di percorso, invece che puntare all'oggetto reale, in modo che possa essere passato ai worker process.

const Bundler = require('parcel-bundler')

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

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.