今天,我们发布了一个新的工具,它将会帮助你在任何地方使用 WebAssembly:WAPM(又名 WebAssembly Package Manager)
其包括:
- 一个命令行工具:
wapm
,包含在 Wasmer 软件包中 - 一个网站和 package 托管:wapm.io
Why: 在 Wasmer 的开发工作中,我们发现开发人员的人机工程学需要显著改进,以便普通用户能够接触到 WebAssembly。我们意识到包管理器将有助于解决常见问题,如发布、定义模块 ABI、分发可执行二进制文件和使用它们。
What: WebAssembly 是一种在具体芯片组指令之上的抽象,这使得 WebAssembly 可以轻松运行在任何机器上。如果我们进一步推进这种抽象,那么我们就能解锁 可以在任何地方运行的通用二进制格式 的潜力。对于目标平台为 WebAssembly 的项目来说,像 WASI 和 Emscripten 这样的集成是必要的。
我们的目标是提供一个能够与 WebAssembly 配套的包管理器,并使得其能简化 WebAssembly 模块的发布与使用。
你可以观看这个视频来看看 wapm
的实战(需要科学上网):Youtube
为什么需要包管理器?
让我们来探讨下为什么包管理器是服务端采用 WebAssembly 的关键。
角色 1:普通用户
首先,我们有一个开发人员的用例,他想使用 WebAssembly 二进制文件,但不知道如何 / 在哪里找到它: 这可以是 nginx、lua、sqlite 或任何其他 wasm 二进制文件。对他们来说,这个过程是这样的:
- 搜索一下,看看在哪里可以找到一个可运行的 lua.wasm
wget https://github.com/wasmerio/wasmer/raw/master/examples/lua.wasm
- 试着运行
wasmer run lua.wasm -- -h
角色 2:通用二进制文件发布者
我们的第二个角色是一个开发人员,他想要创建一个通用二进制,并在任何机器和操作系统上分发它。这对于命令行工具或者可以直接在 Shell 中运行的任何东西都很有用:
- 生成 wasm 文件(使用 emcc 等工具)
emcc main.c -s WASM=1 # this emits the main.wasm file
- 我应该在哪里发布它?Github?Npm?但这只是 WebAssembly,没有 JS 的关联…那就 Github!
git push ...
角色 3:通用库发布者
我们还有一个开发人员的用例,他希望用 WebAssembly 创建通用库,并希望可以在所有语言中使用它们(可以是:Python、PHP、JS、Rust、C 与 C ++…)。
例如,这对于正在创建可以跨任何语言使用的库的开发人员来说是很有用的(比如轻量级嵌入式搜索引擎、人脸检测库、通用 GraphQL 框架……)。
幸运的是,我们已经为很多语言提供了 WebAssembly 集成!Python,PHP,Rust,…
所有这些用例促使我们重新思考包管理器的当前全景,以及我们如何创建一个只关注 WebAssembly 的包管理器,它将统一以下原则:
- 它应该使发布、下载和使用 WebAssembly 模块变得容易
- 它应该支持在 wasm 之上定义命令的简单方法
- 它应该允许不同的 ABI:WASI,Emscripten,甚至未来的新 ABI。
- 它应该可以嵌入到任何语言生态中(Python、PHP、Ruby、JS…),而不会强迫一个生态进入另一个。
NPM
Node.js 软件包管理器非常棒,在托管 WebAssembly 模块方面拥有最多的经验(因为 WebAssembly 是 JavaScript 生态系统的种子)。
然而,我们觉得服务器端的 WebAssembly 是一个全新的使用场景,因此它应该有一个从 WebAssembly 的精髓中塑造出来的包管理器,并从 JavaScript 生态中解放出来。
注意: 虽然我们认为从 JavaScript 中使用 WebAssembly 是一个很好的使用方式,但是我们也希望并且鼓励在 Python、PHP、Rust、…等语言中使用 WebAssembly。
WAPM ????
我们有个好消息!WAPM 已经包含在 wasmer 软件包中了:
curl https://get.wasmer.io -sSfL | sh
你可以现在就试试。比如试试使用 cowsay 和 lolcat:
wapm install cowsay lolcat
为了便于采用 wapm,我们已经发布了很多很棒的软件包,所以你可以开始使用它们了!
- cowsay(使用 Rust 和 WASI)
- lolcat(也是 WASI)
- sqlite
- php
- nginx
- lua
- wabt
发布你自己的 WebAssembly 模块
现在就在 WAPM 注册,开始发布你自己的软件包,这样任何人都可以开始使用它们,在任何地方!
使用手册参考:手册
我们还创建了一个示例包,展示如何使用 Rust 和 WASI 创建包并将其发布到 wapm:示例
欢迎开始你的 WebAssembly 之旅!
有兴趣和我们一起工作吗?请联系 syrus@wasmer.io!