【发布时间】:2019-06-16 10:25:56
【问题描述】:
我正在尝试制作一个 Rust WebAssembly 项目并修改了 rust-webpack-template 作为我的起点。该模板是一个 webpack 项目,其中包含一个调用单个 Wasm 函数的 JavaScript 文件,Rust Wasm 从那里接管。
我修改了模板,因为我想在 JavaScript 中使用我的主要逻辑并通过 API 调用 Rust Wasm。
我已将 webpack 条目更改为bootstrap.js,如下所示。
// bootstrap.js
import("./index.js").catch(e =>
console.error("Error importing 'index.js':", e)
);
我添加了文件 index.js,它调用了 Rust Wasm 函数
// index.js
import * as wasm from "../crate/pkg/rust_webpack";
const title = document.getElementById("msg");
title.innerText = wasm.get_msg();
Rust 中的 get_msg 函数如下所示:
#[wasm_bindgen]
pub fn get_msg() -> String {
"Hello from Rust WebAssembly!".to_owned()
}
当我使用webpack-dev-server -d 运行项目时,一切正常。
但是,当我使用webpack 构建项目并尝试直接托管生成的文件时,什么都没有显示并且浏览器控制台显示错误:
导入 'index.js' 时出错:TypeError: "Response has unsupported MIME type"
此错误来自bootstrap.js 中的代码,但我不完全确定它的含义或如何修复此错误。
为什么在使用 webpack 开发服务器提供服务时可以正常工作,但在将所有内容捆绑在一起后就不行?
【问题讨论】:
-
直接托管生成的文件——如何托管它们?在这两种情况下,在浏览器的网络检查器中查看文件的 MIME 类型;大概他们不同。然后找出他们不匹配的原因。然后弄清楚如何使它们匹配。
-
对于我如何托管它们,我已经尝试了一个简单的
express.js服务器来静态托管 webpack 导出到的目录,以及直接通过file:///访问文件。在这两种情况下我都会遇到同样的错误。 -
对于网络检查员来说,一切都证明是成功的。我不确定 webpack 究竟是如何工作的,但实际上没有
index.js或bootstrap.js文件。只有bundle.js、1.bundle.js和一个看似随机命名的.module.wasm文件。所有显示已成功获取。 -
我希望网络传输没问题。这些文件的标头说 MIME 类型在它有效和无效的情况下是什么?
-
对于
.js,内容类型是application/javascript,对于module.wasm文件,它是application/octet-stream。
标签: javascript webpack rust webassembly