@
Cbdy 但是有几种需求不能满足,比如 drill.js 的异步模块,如果 'data'模块需要一次 ajax 请求数据,按照 es module 就只能返回一个 Promise 对象,后续逻辑再做一层包裹,才能做这种需求,而且 esm 是同步开发的模式来思考;
drill 的模块还有 task 模块和 init 模块,虽然这两种是非必须但是开发还是很实用的,还有就是 web 前端开发里的 非模块文件(普通 js ), esm 没有把它思考进去; drill.js 就能当成默认文件插入;
还有一种未来一定会出现的一些模块类型,比如 点击按钮音效,按照 drill.js 的扩展开发模式,很容易就能做到如下:
let p = await load("xxx.mp3 -defer")
btn.on("click",e=>{
p.play()
})
不考虑做 esm 还有开发扩展上的考虑,现在 drill.js 开发扩展支持是很方便的,代码如下:
loaders.set("wasm", async (packData) => {
let data;
try {
// 请求数据
data = await fetch(
packData.link);
} catch (e) {
packData.stat = 2;
return;
}
// 转换 arrayBuffer 格式
data = await data.arrayBuffer();
// 转换 wasm 模块
let module = await WebAssembly.compile(data);
const instance = new WebAssembly.Instance(module);
// 重置 getPack
packData.getPack = async () => {
return instance.exports;
}
// 设置完成
packData.stat = 3;
});
使用如下:
let xx = await load("xx.wasm")
xx(); // 这里直接用 xx 方法
drill.js 目前很容易就能开发扩展,esm 开发扩展会变得很麻烦,可能又要走预编译方案,还有得重写 map 映射,或者我还要在想想 esm 怎样开发扩展会更方便;