Ressourcentyp


Ressourcentypen
Wie in der Ressourcendokumentation beschrieben, beschreibt Parcel jede Eingabedatei als Asset. Asset-Typen werden als Klassen beschrieben, die von der Asset-Basisklasse erben und die erforderlichen Schnittstellen zum Parsen, Analysieren von Abhängigkeiten, Transformationen und Codegenerierung implementieren.
Da Parcel Ressourcen parallel über mehrere Prozessorkerne hinweg verarbeitet, können Ressourcentypen Transformationen durchführen, die auf Transformationen beschränkt sind, die jeweils nur eine Datei bearbeiten. Um mehrere Dateien zu konvertieren, können Sie einen benutzerdefinierten Packager verwenden.
Ressourcenschnittstelle

const {Asset} = require('parcel-bundler');
class MyAsset extends Asset {
  type = 'foo'; // 设置主输出类型
  parse(code) {
    // 将代码解析为 AST
    return ast;
  }
  pretransform() {
    // 可选。在收集依赖之前转换。
  }
  collectDependencies() {
    // 分析依赖
    this.addDependency('my-dep');
  }
  transform() {
    // 可选。在收集依赖之后转换。
  }
  generate() {
    // 生成代码。如有需要,可提供多个返回。
    // 结果会传到合适的 packagers 去生成最终的文件束
    return {
      foo: 'my stuff here', // 主输出
      js: 'some javascript' // 如若需要,此转换内容可被放到 JS 文件束中
    };
  }
}

Ressourcentyp registrieren
Sie können die Methode addAssetType verwenden, um Ihren Ressourcentyp über den Packager zu registrieren. Es akzeptiert die zu registrierende Dateierweiterung und den Pfad zum Ressourcentypmodul. Dabei handelt es sich um einen Pfad, nicht um ein tatsächliches Objekt, der erstellt wurde, damit er an den Arbeitsprozess übergeben werden kann.

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