文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
资源类型
如同 资源 一章所述,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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论