返回介绍

资源类型

发布于 2019-05-26 15:36:19 字数 1287 浏览 1084 评论 0 收藏 0

如同 资源 一章所述,Parcel 视每个输入的档案为一个 资源 (Asset)。 资源类型代表着从 资源 类别继承而来的类别,其实作了必要的介面以分析相依套件、转换及产生程式码。

Parcel 利用多核心并行处理资源,因此仅能进行同一时间处理单一档案的资源类型转换。若需转换多种档案则需自订一个 Packager

资源介面

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

class MyAsset extends Asset {
  type = 'foo' // 设定主要输出类别

  async parse(code) {
    // 将程式码解析为抽象语法树 (AST)
    return ast
  }

  async pretransform() {
    // 非必要。在收集相依套件之前进行转换
  }

  collectDependencies() {
    // 分析相依套件
    this.addDependency('my-dep')
  }

  async transform() {
    // 非必要。在收集相依套件后进行转换
  }

  async generate() {
    // 产生程式码。必要时可回传多个转换结果。
    // 结果将会传给适当的 Packager 进行最终打包。
    return [
      {
        type: 'foo',
        value: 'my stuff here' // 主要输出
      },
      {
        type: 'js',
        value: 'some javascript', // 若有需要可将此转换结果一同打包
        sourceMap
      }
    ]
  }

  async postProcess(generated) {
    // 在产生程式码后进行处理,可用来组合多种类型的资源
  }
}

module.exports = MyAsset

注册资源类型

你可以使用 addAssetType 方法在打包工具中注册你的资源类型,其接受欲注册的副档名及你的资源类型模型路径。 为了将模型传递至 worker 中执行,这里仅需传入路径而非实际的物件。

const Bundler = require('parcel-bundler')

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文