我正在使用MongoDB Realm/App Services为现有的iOS应用程序制作Web前端.
标准的Realm Web SDK只允许身份验证和后端功能,所以我try 使用Web Assembly版本(realm@12.0.0-browser.2
)的预览版,以便我可以使用设备同步并以我习惯的方式与Realm对象交互.
详情请浏览:Get Started with Realm Web & Atlas Device Sync (Preview)
我只是使用vite创建的基本应用程序脚手架,然后在App.vue
中导入领域.我(还没有)在代码中的任何其他地方使用领域.
import Realm, { App } from "realm";
个
正如领域SDK文档中所建议的,对于Web Assembly版本,我必须在vite.config.js
中启用顶级等待:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
esbuild: {
supported: {
'top-level-await': true
},
},
optimizeDeps: {
esbuildOptions: {
supported: {
"top-level-await": true
},
},
},
})
因此,当我构建和预览(vite build
之后是vite preview
)时,这是没有错误的.
但是,当我执行npm run dev
(vite
)时,服务器按预期启动,但浏览器控制台中有以下错误:
[Error] wasm streaming compile failed: TypeError: Unexpected response MIME type. Expected 'application/wasm'
(anonymous function) (realm.js:726)
[Error] falling back to ArrayBuffer instantiation
(anonymous function) (realm.js:727)
[Error] failed to asynchronously prepare wasm: CompileError: WebAssembly.Module doesn't parse at byte 0: module doesn't start with '\0asm'
(anonymous function) (realm.js:717)
[Error] Aborted(CompileError: WebAssembly.Module doesn't parse at byte 0: module doesn't start with '\0asm')
abort (realm.js:661)
(anonymous function) (realm.js:718)
如果我构建和预览,这不会发生,所以我希望它实际上不会成为一个问题,但我不明白这里发生了什么,我很好奇如何在开发过程中修复它.
编辑
感谢VonC个人的回答.我try 使用自定义中间件,但收到找不到该文件的错误.
这.wasm
个文件在node_modules/realm/dist
中,但它似乎在node_modules/.vite
中查找.
如果我使用const wasmPath = path.join(__dirname, req.url);
(即不使用public
路径组件),这就是错误.
环境:没有这样的文件或目录,请打开‘<;my_local_path>;/vite-project/node_modules/.vite/deps/realm-js-wasm.wasm’
最后,我使用中间件解决方案并将其直接重定向到领域文件夹,从而使其正常工作:
const wasmPath = path.join(__dirname, 'node_modules/realm/dist', path.basename(req.url));
个