最终文件结构
|
|
一. 安装必要软件
-
安装Rust
确保你已安装Rust环境,可以通过以下命令来确认是否安装成功:1
rustc --version
-
安装wasm-pack
wasm-pack
用于将Rust代码编译为WebAssembly格式。通过以下命令安装:1
cargo install wasm-pack
-
安装npm
npm是JavaScript包管理工具,确保安装最新版本。
二. 编写代码
-
构建一个新的Rust包 在项目目录下创建一个新的Rust库项目:
1
cargo new --lib wasm
-
配置
Cargo.toml
修改Cargo.toml
来添加WebAssembly的依赖和输出配置:1 2 3 4 5 6 7 8 9 10
[package] name = "wasm" version = "0.1.0" edition = "2021" [dependencies] wasm-bindgen = "0.2.95" [lib] crate-type = ["cdylib", "rlib"]
-
编写Rust文件
src/lib.rs
使用wasm-bindgen
库将Rust函数暴露给JavaScript。编写如下代码:1 2 3 4 5 6 7 8 9 10 11 12
extern crate wasm_bindgen; use wasm_bindgen::prelude::*; #[wasm_bindgen] extern { pub fn alert(s: &str); } #[wasm_bindgen] pub fn greet(name: &str) { alert(&format!("Hello, {}!", name)); }
-
将Rust代码编译为WebAssembly
使用wasm-pack
进行编译:1
wasm-pack build
编译后的WebAssembly文件将生成在
pkg/
目录下。
三. 打包代码
-
初始化npm项目
创建一个package.json
文件:1
npm init -y
-
安装Webpack及相关工具
安装Webpack及开发服务器,用于打包和本地运行JavaScript与WebAssembly:1
npm install --save-dev webpack webpack-cli webpack-dev-server
-
编写JavaScript调用代码
src/index.js
在index.js
中,调用由Rust编译出的WebAssembly模块:1 2 3 4 5
const js = import("../pkg/wasm"); js.then((js) => { js.greet("world"); });
-
编写Webpack配置文件
webpack.config.js
该配置文件用于打包项目并支持WebAssembly异步加载:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
module.exports = { entry: './src/index.js', mode: 'development', // 开发模式,可切换为'production' experiments: { asyncWebAssembly: true, // 异步加载WebAssembly }, module: { rules: [ { test: /\.wasm$/, type: "webassembly/async" // 使用异步加载WebAssembly } ] }, };
-
打包JavaScript文件
使用Webpack打包项目:1
npx webpack
四. 运行代码
-
编写HTML文件
src/index.html
在HTML文件中引入打包后的main.js
:1 2 3 4 5 6 7 8 9 10 11 12
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>WebAssembly Example</title> </head> <body> <h1>WebAssembly Example</h1> <script src="../dist/main.js"></script> </body> </html>
-
运行HTML文件
打开src/index.html
,在浏览器中运行此文件,应该会看到弹窗显示“Hello, world”。