wasm可以理解成一个虚拟机, 和宿主机之间通过 Memory, Table 来通信, 实例化wasm对象时, 可以导入导出数据.

安装 cargi install wasm-pack

直接下载 工具 wabt和bineryen 放到 PATH 中即可.

rust 示例

编译 wasm-pack build

extern crate wasm_bindgen;

use std::ops::Add;
use sha2::{Digest, Sha512};
use sha2::digest::Update;
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
extern {
    pub fn alert(s: &str);
}

#[wasm_bindgen]
pub fn greet(name: &str) {
    println!("收到参数: {}", name);
    alert(&format!("Hello, {}!", name));
}

#[wasm_bindgen]
pub fn add(a: i32, b: i32) -> i32 {
    return a + b;
}


#[wasm_bindgen]
pub fn get_name(data: &str, callback: String) -> String
{
    return String::from(data).add(&callback);
}

#[wasm_bindgen]
pub fn sha2_512(data: String) -> String
{
    let mut s2 = Sha512::new();
    Update::update(&mut s2, data.as_bytes());
    let rs = s2.finalize();
    return format!("{:x}", rs);
}
#[wasm_bindgen]
pub fn error(message: &str) -> Result<String, String>
{
    return Err(message.to_string());
}

js代码

添加依赖

{
  "dependencies": {
    "vue": "^3.5.13",
    "wasmpkg": "file:../wasm-ru/pkg"
  }
}

import * as wasmpkg from 'wasmpkg'

console.log(wasmpkg)

const sha2512 =  wasmpkg.sha2_512(text.value)