Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未能加载wasm应用程序_Javascript_Apache_Fetch_Mime Types_Webassembly - Fatal编程技术网

Javascript 未能加载wasm应用程序

Javascript 未能加载wasm应用程序,javascript,apache,fetch,mime-types,webassembly,Javascript,Apache,Fetch,Mime Types,Webassembly,我正在尝试主持一个网站,我使用一个.wasm文件和由wasm包工具创建的.js脚本 我用npm和node.js在本地测试了这个项目,一切正常 但是后来我把它放在一个树莓(apache2)上,当我试图访问它时,我遇到了以下错误: 加载模块脚本失败:服务器使用非JavaScript MIME类型“application/wasm”进行响应。根据HTML规范,对模块脚本执行严格的MIME类型检查。 细节 有多个文件,但想法如下: my index.html加载模块bootstrap.js // boo

我正在尝试主持一个网站,我使用一个.wasm文件和由wasm包工具创建的.js脚本

我用npm和node.js在本地测试了这个项目,一切正常

但是后来我把它放在一个树莓(apache2)上,当我试图访问它时,我遇到了以下错误:

加载模块脚本失败:服务器使用非JavaScript MIME类型“application/wasm”进行响应。根据HTML规范,对模块脚本执行严格的MIME类型检查。

细节 有多个文件,但想法如下:

my index.html加载模块
bootstrap.js

// bootstrap.js content
import("./index.js").catch(e => console.error("Error importing `index.js`:", e));
我的主要代码在
index.js
中,调用
test\u wasm\u bg.js

// bootstrap.js content
import("./index.js").catch(e => console.error("Error importing `index.js`:", e));
最后,
test_wasm_bg.js
使用以下行加载wasm文件:

// test_wasm_bg.js first line
import * as wasm from './test_wasm_bg.wasm';

问题在哪里


加载web程序集文件的正确方法是什么?

我终于找到了在
wasm bindgen
项目中加载wasm应用程序的正确方法

事实上,一切都在进行中

当您编译项目而不希望使用绑定器运行它时,您必须使用--target标志运行wasm包构建

wasm包构建--发布--目标web

这将创建一个.js文件(在我的示例中为pkg/test_wasm.js),其中包含加载wasm应用程序所需的所有内容

然后这就是如何使用wasm bindgen(
index.js
)创建的函数:

在HTML文件中包含index.js


然后它就成功了

编辑: 现在我对javascript生态系统有了更多的了解,我尝试解释一下我的理解: 在js中有很多导入方法,下面是一个列表:

除了wasm包的默认目标是节点样式之外,您不需要了解太多。此导入将在node.js中工作,但不会直接在浏览器中工作。因此,在node中,您可以直接从wasm文件导入函数,如下所示:
从“/test.wasm”导入{exu函数}

但是这些导入样式现在在浏览器中不起作用。也许这是可能的 但现在,您的浏览器只知道js模块。因此,如果您试图直接在浏览器中导入.wasm文件,它将抛出mime类型错误,因为它不知道如何处理webassembly文件


您用来从ecmascipt模块(例如有许多nmp包)转换为单个js文件的工具称为(webpack、rollup、snowpack…)。如果你和npm一起做一个大项目,你可能需要一个。否则,“--target web”将告诉wasm bindgen实例化wasm模块(查看
pkg/test\u wasm.js

您无法导入wasm,。改用fetch。好的,谢谢你的链接!但要使用“InstanceTestStreaming”,您需要一个ImportObjetc。这是什么?ImportObjects只是一个对象,您创建时使用了一些函数等,希望向wasm模块公开。如果不公开任何内容,您可以发送
{}
。此链接可能会对您有更多帮助->所示的示例也在github上->当我尝试这样做时,我得到以下错误:
Uncaught(承诺中)TypeError:WebAssembly.instantiate():Import#0 module=“./test_wasm_bg.js”错误:模块不是对象或函数,您是否打算执行
测试\u wasm\u bg.wasm
“服务器使用非Javascript MIME类型的appliaction/wasm进行响应”。这个错误对我来说毫无意义。有人能解释一下这是什么意思吗。我正在尝试使用WASM,并得到一条消息,说服务器用WASM响应-该错误与Prolog的“否”一样有用。现在是2021年-我们没有进步一点吗?你是一个救生员@我的编辑回答了你的问题吗?