• ? 资源类型
    • 资源接口
    • 注册资源类型
    • 帮助我们改善文档

    ? 资源类型

    正如 资源文档 里描述的,Parcel 将输入的文件看作 资源(Asset)。资源类型被看作继承自基准 Asset类的子类,并实现了必须的接口,去解析、分析依赖、转换及生成代码。

    因为 Parcel 在多处理器内核中并行处理资源,因此资源类型所能够实施的转换行为,会被限制为那些可以  在单一时间内操作单一文件的转换行为。而那些需要操作多个文件的转换行为,则需要一个自定义的Packager。

    资源接口

    1. const { Asset } = require('parcel-bundler')
    2. class MyAsset extends Asset {
    3. type = 'foo' // 设置主要输出类型
    4. async parse(code) {
    5. // 将代码解析为 AST 树
    6. return ast
    7. }
    8. async pretransform() {
    9. // 可选。在收集依赖之前转换。
    10. }
    11. collectDependencies() {
    12. // 分析依赖
    13. this.addDependency('my-dep')
    14. }
    15. async transform() {
    16. // 可选。在收集依赖之后转换。
    17. }
    18. async generate() {
    19. // 生成代码。如有需要,可返回多个转换(renditions)。
    20. // 结果会传到合适的 packagers 去生成最终的 bundles
    21. return [
    22. {
    23. type: 'foo',
    24. value: 'my stuff here' // 主输出
    25. },
    26. {
    27. type: 'js',
    28. value: 'some javascript', // 如若需要,此转换内容可被放到 JS 的 bundle 中
    29. sourceMap
    30. }
    31. ]
    32. }
    33. async postProcess(generated) {
    34. // 所有代码生成后的过程
    35. // 可用于组合多种类型资源
    36. }
    37. }

    注册资源类型

    你可以用 addAssetType 方法在打包工具中去注册你的资源类型。它接受一个文件扩展名,以及资源类型模块的路径。它是一个路径,而非实际的对象,这样可以使它被传至 worker 进程中。

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

    帮助我们改善文档

    如果有遗漏或者不清楚的地方,请在本站的仓库 提交issue 或者 编辑此页面.