教程 > Parcel

资源类型

资源类型

资源类型
正如 资源文档 中所述,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'));