資源類型


資源類型
如 在 資源文件 中所述,Parcel 將每個輸入檔案描述為 Asset (資源) 。資產類型被描述為從 Asset 基類繼承的類,並實現所需的介面來解析,分析依賴關係,轉換和程式碼產生。
由於 Parcel 會跨多個處理器核心並行處理資源,因此資源類型可以執行轉換,並且僅限於一次對單一檔案進行操作的轉換。要跨多個檔案進行轉換,可以使用自訂的 Packager 。
資源介面

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 文件束中
    };
  }
}

註冊資源類型
你可以使用 addAssetType 方法透過打包器註冊你的資源類型。它接受要註冊的檔案副檔名和資源類型模組的路徑。這是一個路徑,而不是實際的對象,這樣做以便它可以傳遞給工作進程。

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