WebAssembly (Wasm) 编译
Dart 团队很高兴在构建用于 Web 的 Dart 和 Flutter 应用时添加 WebAssembly 作为编译目标。
WebAssembly 支持的开发仍在进行中,这可能会导致频繁更改。请访问此页面以获取最新更新。
WebAssembly 支持
#当前版本的 Dart 编译到 WebAssembly 有一些限制:
它以具有垃圾回收的 WebAssembly (WasmGC) 为目标,因此并非所有浏览器都当前支持。当前的浏览器列表可在 Flutter 文档 中找到。
编译后的 Wasm 输出当前针对 JavaScript 环境(例如浏览器),因此当前不支持在标准 Wasm 运行时(如 wasmtime 和 wasmer)中执行。详情请参见 问题 #53884
编译到 Wasm 时,仅支持 Dart 的 新一代 JS 交互机制 。
webdev
工具当前不支持运行 (webdev serve
) 或构建 (webdev build
)。以下步骤包含一个临时的解决方法。详情请参见 webdev 问题 2206 。
支持的包
#要查找与 Wasm 兼容的包,请在 pub.dev 上使用 wasm-ready
筛选器。
如果某个包没有导入非 Wasm 兼容库(例如 dart:html
、 dart:js
等),则该包为“wasm-ready”。您可以在 JS 交互页面 上找到不允许使用的库的完整列表。
将您的 Web 应用编译到 Wasm
#我们在 dart
CLI 中添加了在 Dart 和 Flutter 中调用 Wasm 编译器的支持:
$ dart help compile wasm
将 Dart 编译为 WebAssembly/WasmGC 模块。
用法:dart compile wasm [参数] <Dart 入口点>
-h, --help 打印此用法信息。
-o, --output 将输出写入 <文件名>。
这可以是绝对路径或相对路径。
-v, --verbose 在编译期间打印调试输出
--enable-asserts 启用断言语句。
-D, --define=<key=value> 定义环境声明。要指定多个声明,请使用多个
选项或使用逗号分隔键值对。
例如:dart compile wasm -Da=1,b=2 main.dart
Wasm 编译在稳定版中可用,但仍处于预览阶段。在我们继续优化工具以改善开发者体验的同时,您可以按照此处概述的临时步骤尝试将 Dart 编译为 Wasm:
从一个 Web 应用开始:
dart create -t web mywebapp
模板使用
package:web
创建一个小型 Web 应用,这是运行 Wasm 所必需的。确保您的 Web 应用已从dart:html
迁移到package:web
。使用 Wasm 编译到新的
site
输出目录:mywebapp$ dart compile wasm web/main.dart -o site/main.wasm
复制 Web 文件:
cp web/index.html web/styles.css site/
创建一个 JS 引导文件来加载 Wasm 代码:
添加一个新的文件
site/main.dart.js
并将其内容填充为此main.dart.js
示例 。提供输出:
dart pub global run dhttpd
(文档)
您也可以在此处尝试此小型示例 此处 。
除非另有说明,否则本网站上的文档反映的是 Dart 3.6.0。页面最后更新于 2025-02-05。 查看源代码 或 报告问题.