Skip to content

如何使用AssemblyScript编译的wasm

1.文件准备

创建assembly空目录。目录下创建tsconfig.json,文件内容为

json
{
  "extends": "assemblyscript/std/assembly.json",
  "include": [
    "./**/*.ts"
  ]
}

添加完这个后,方便编译器识别AssemblyScript语法

2.编写AssemblyScript

assembly目录下,创建index.ts,内容如下:

ts
export function add(a: i32, b: i32): i32 {
  return a + b;
}

3.添加编译脚本

package.json里加入下面命令

json
"scripts": {
    "asbuild:debug": "asc assembly/index.ts  --target debug",
    "asbuild:release": "asc assembly/index.ts --target release",
    "asbuild": "npm run asbuild:debug && npm run asbuild:release",
},

然后执行npm run asbuild编译。编译后会得到wasmwatjs等格式文件

4.在项目里引入wasm

  • 方式1
js
const url = new URL('../build/release.wasm', import.meta.url)
const wasm =  await WebAssembly.instantiateStreaming(globalThis.fetch(url),{
    env: {
        abort: ()=> {}
    }
})
const add = wasm.instance.exports.add
  • 方式2
js
const url = new URL('../build/release.wasm', import.meta.url)
const wasm =  await WebAssembly.instantiate(await globalThis.WebAssembly.compileStreaming(
    globalThis.fetch(url)
),{
  env: {
    abort: ()=> {}
  }
})
const add = wasm.exports.add
  • 方式3 同步导入
js
import * as WASM from '../build/release.js'
const add = WASM.add

如果遇到node:fs/promises报错。在../build/release.js文件里搜索node:fs/promises。把函数内条件分支去掉,直接改成return await globalThis.WebAssembly.compileStreaming(globalThis.fetch(url))返回

苏ICP备20040768号