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