javascript AWS S3不允许我的JS文件导入WebAssembly代码

mrwjdhj3  于 2022-12-28  发布在  Java
关注(0)|答案(1)|浏览(101)

我正在尝试使用AWS S3托管一个静态网站。该网站包含一些用于简单客户端游戏的WebAssembly代码。
但是当我尝试从JavaScript文件导入WebAssembly时,我得到了以下错误:
由于s3-website-us-east-1.amazonaws.com/pkg/my_wasm_bg.wasmMIME类型(“binary/octet-stream”)不允许,从“http://REDACTED]. www.example.com“加载模块被阻止。
我在Google上搜索了这个问题,我对这个问题的理解是S3在它的内部HTTP请求上设置了X-Content-Type-Options: nosniff头,这样我的JS就不能导入任何类型不是JavaScript MIME类型的文件,因为binary/octet-stream不是JavaScript MIME类型,所以导入请求被阻塞。
我怎样才能克服这个问题,并让我的JS文件成功地导入我的WebAssembly在AWS S3?

zphenhs4

zphenhs41#

配置您的webpack.config.js以输出针对您的环境的javascript。配置文件应该设置为输出到dist目录,然后作为部署的一部分复制到S3。
您可能只需要运行一个独立的构建步骤,因为该步骤通常被预配置为样板文件(如create-react-application)的一部分。
更详细地说:
浏览器内部的ES6 import语句(在编写时)只能在运行时本地支持导入其他模块文件(例如导出文件的javascript文件),并且只能从其他模块调用。
为了便于开发,Babel(transpiler)和Webpack(bundler)等工具支持使用ES6样式导入其他文件,如图像、css和wasm。
在你的web服务器的特定开发环境中,这些工具正在运行,并为你所期望的支持的web浏览器创建有效的javascript。
这一步通常是在你修改了源文件之后完成的。要通过S3在你当前的开发环境之外服务你的应用程序,你需要添加一个构建步骤,将你的源代码翻译并捆绑成一组静态文件,然后可以从S3服务。
另外,X-Content-Type-Options: nosniff指示浏览器接受提供的内容类型值,而不是试图根据文件头确定它。

相关问题