非 Rustup 设置

wasm-pack 使用 wasm32-unknown-unknown 目标编译您的代码。如果您没有通过 rustup target add wasm32-unknown-unknown 安装,wasm-pack 会自动为 Rustup 设置添加此目标。但是,如果您没有使用 Rustup,那么我们将无法自动执行此操作,您需要自己执行此操作。

手动添加 wasm32-unknown-unknown

免责声明:这不能保证对所有设置都有效。以下说明特定于与确切 rustc 版本匹配的设置,这意味着下载的 wasm32 目标可能不兼容。

要手动添加 wasm32-unknown-unknown 目标,您需要从 rust-lang 网站下载它并将内容放在正确的文件夹中。

所有不同 rustc 版本的所有目标都没有以人性化的方式在网站上呈现(尚未),以便您只需选择您想要的并下载它,原因之一是 Rustup 为您处理所有这些,并且目标的打包主要为工具构建。但是,以下步骤将引导您完成此操作。

首先,通过运行 rustc --version 检查您正在使用哪个版本的 rustc。这应该显示类似以下内容:rustc 1.33.0 (2aa4c46cf 2019-02-28)。然后,您需要为您的 rustc 版本下载正确的 wasm32 目标。rustc 版本是 url 的一部分,这意味着对于 rustc 1.33.0,url 将如下所示:https://static.rust-lang.org/dist/rust-std-1.33.0-wasm32-unknown-unknown.tar.gz

以下是不同 rustc 版本的 url 示例

  • Nightly https://static.rust-lang.org/dist/rust-std-nightly-wasm32-unknown-unknown.tar.gz
  • 特定日期 nightly(2019-03-10)https://static.rust-lang.org/dist/2019-03-10/rust-std-nightly-wasm32-unknown-unknown.tar.gz
  • Beta https://static.rust-lang.org/dist/rust-std-beta-wasm32-unknown-unknown.tar.gz

您可以通过执行 wget https://static.rust-lang.org/dist/rust-std-1.33.0-wasm32-unknown-unknown.tar.gz 或只是在 Web 浏览器中访问 url 来下载它。

在您在您选择的某个位置下载了此 tarball 之后,您应该解压缩它。这应该会生成一个名为 rust-std-1.33.0-wasm32-unknown-unknown 的文件夹,其中包含一些文件夹和文件,但有趣的是一个名为 rust-std-wasm32-unknown-unknown 的文件夹,其中包含一个 lib,并且应该包含一个 rustlib 文件夹,以及一个名为 wasm32-unknown-unknown 的文件夹。这是我们要移动的文件夹。

以下是 rustc 1.33.0 的结构示例

rust-std-1.33.0-wasm32-unknown-unknown
├── components
├── install.sh
├── rust-installer-version
└── rust-std-wasm32-unknown-unknown
    ├── lib
    │   └── rustlib
    │       └── wasm32-unknown-unknown

要了解我们应该将此 wasm32-unknown-unknown 文件夹移动到哪里,我们需要运行 rustc --print sysroot,这应该会打印一个类似于以下路径(这将在不同的操作系统上有所不同):/home/user/rust/rust-1.33.0-2019-02-28-2aa4c46cf。该文件夹应该包含一个 lib 文件夹,其中包含一个 rustlib 文件夹。我们应该将 wasm32-unknown-unknown 移动到此文件夹。

在类 Unix 操作系统上,我们可以使用以下命令执行此操作:mv rust-std-1.33.0-wasm32-unknown-unknown/rust-std-wasm32-unknown-unknown/lib/rustlib/wasm32-unknown-unknown /home/user/rust/rust-1.33.0-2019-02-28-2aa4c46cf/lib/rustlib/,就是这样!