正如 資源文檔 中所述,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'));
~~~