跳到主要内容

环境配置

本章节将指导你配置 WebAssembly 开发环境,包括工具链安装、项目初始化和基本配置。

开发环境概览

WebAssembly 开发需要以下工具:

  • 编译器:将源代码编译为 WebAssembly 二进制
  • 构建工具:打包和优化 WebAssembly 模块
  • 调试工具:浏览器开发者工具和专用调试器
  • 运行时:浏览器或 Node.js 环境

根据你选择的语言,需要不同的工具链:

语言编译器构建工具
Rustrustc + wasm-bindgenwasm-pack
C/C++Emscripten (emcc)emcc
AssemblyScriptascasc
WATwat2wasmwabt

安装 Rust 工具链

Rust 是开发 WebAssembly 的首选语言,提供了完善的工具链支持。

安装 Rust

访问 rustup.rs 或运行以下命令:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Windows 用户可以下载 rustup-init.exe 安装。

安装完成后,验证安装:

rustc --version
cargo --version

安装 wasm-pack

wasm-pack 是 Rust WebAssembly 的核心构建工具,它简化了编译、打包和发布流程:

cargo install wasm-pack

验证安装:

wasm-pack --version

安装 wasm-bindgen

wasm-bindgen 用于生成 JavaScript 和 WebAssembly 之间的绑定代码。通常由 wasm-pack 自动管理,但也可以单独安装:

cargo install wasm-bindgen-cli

安装 Emscripten

Emscripten 是将 C/C++ 编译为 WebAssembly 的主流工具链。

安装依赖

Emscripten 需要 Python 和 Git:

python --version
git --version

安装 Emscripten SDK

git clone https://github.com/emscripten-core/emsdk.git
cd emsdk

./emsdk install latest
./emsdk activate latest

Windows 用户:

git clone https://github.com/emscripten-core/emsdk.git
cd emsdk

emsdk install latest
emsdk activate latest

配置环境变量

每次使用前需要激活 Emscripten 环境:

source ./emsdk_env.sh

Windows:

emsdk_env.bat

验证安装:

emcc --version

安装 WABT 工具集

WABT (WebAssembly Binary Toolkit) 提供了处理 WebAssembly 文本格式和二进制格式的工具。

从源码编译

git clone https://github.com/WebAssembly/wabt.git
cd wabt
git submodule update --init
mkdir build
cd build
cmake ..
cmake --build .

使用包管理器安装

macOS:

brew install wabt

Ubuntu:

sudo apt install wabt

Windows (使用 Scoop):

scoop install wabt

WABT 常用工具

工具功能
wat2wasm将 WAT 文本格式编译为 WASM 二进制
wasm2wat将 WASM 二进制反编译为 WAT 文本
wasm-validate验证 WASM 文件格式
wasm-objdump查看 WASM 文件结构

安装 AssemblyScript

AssemblyScript 是 TypeScript 语法的 WebAssembly 开发语言,适合前端开发者。

npm install -g assemblyscript

验证安装:

asc --version

Node.js 环境

WebAssembly 也可以在 Node.js 中运行,需要 Node.js 8+ 版本:

node --version

安装最新 LTS 版本:

nvm install --lts
nvm use --lts

浏览器开发工具

现代浏览器都内置了 WebAssembly 支持:

Chrome DevTools

  1. 打开开发者工具 (F12)
  2. Sources 面板可以查看 .wasm 文件
  3. 支持 WebAssembly 断点调试
  4. Performance 面板可以分析 Wasm 性能

Firefox Developer Tools

  1. 内置 Wasm 调试器
  2. 可以查看 WAT 格式源码
  3. 支持单步调试

Edge DevTools

与 Chrome 类似,基于 Chromium 内核。

创建第一个项目

Rust WebAssembly 项目

使用 wasm-pack 创建新项目:

cargo new --lib hello-wasm
cd hello-wasm

编辑 Cargo.toml

[package]
name = "hello-wasm"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib", "rlib"]

[dependencies]
wasm-bindgen = "0.2"

编辑 src/lib.rs

use wasm_bindgen::prelude::*;

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

构建项目:

wasm-pack build

C/C++ WebAssembly 项目

创建简单的 C 文件 hello.c

#include <emscripten.h>

EMSCRIPTEN_KEEPALIVE
int add(int a, int b) {
return a + b;
}

编译为 WebAssembly:

emcc hello.c -o hello.js -s EXPORTED_FUNCTIONS="['_add']"

WAT 项目

创建 add.wat 文件:

(module
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
(export "add" (func $add)))

编译为 WebAssembly:

wat2wasm add.wat -o add.wasm

项目结构建议

一个典型的 WebAssembly 项目结构:

my-wasm-project/
├── src/
│ ├── lib.rs # Rust 源码
│ └── utils.rs # 辅助模块
├── pkg/ # wasm-pack 输出目录
│ ├── my_wasm.d.ts # TypeScript 类型定义
│ ├── my_wasm.js # JavaScript 绑定
│ └── my_wasm_bg.wasm # WebAssembly 二进制
├── www/ # Web 前端
│ ├── index.html
│ ├── index.js
│ └── package.json
├── Cargo.toml # Rust 配置
└── README.md

常见问题

编译速度慢

Rust 编译 WebAssembly 可能较慢,可以通过以下方式优化:

[profile.release]
opt-level = "s"
lto = true

内存限制

WebAssembly 默认内存有限,可以通过配置增加:

// Rust
#[wasm_bindgen]
pub fn init_memory() {
// 使用 wasm-bindgen 的内存配置
}

调试困难

在开发模式下启用调试信息:

wasm-pack build --dev

下一步

环境配置完成后,你可以继续学习: