javascript 将“@daily-co/daily-js”导入SvelteKit应用程序会抛出“global is not defined”错误

pw9qyyiw  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(148)

我尝试过

1.我试着通过if (browser)解决它,更具体地说(<script context="module">内部的load函数中的if (!browser) { let DailyIframe = await import('daily-co/daily-js) }),所以代码总是在服务器上执行)。然后将其作为一个prop传递给一个组件。然而,尽管它在服务器上工作,本地dev环境重新运行load函数(因为它从来没有导入任何东西,所以必须返回一个空的prop)并覆盖DailyIframe的值(可能是Vite/SvelteKit的一个bug)。
1.我试着在一个端点导入库,例如api.json.js,它总是在服务器上执行。但是,它必须返回一个json,我不能把整个库变量传递给它。

经过研究这似乎是来自Vite,SvelteKit和某些库的问题的组合,其中global是未定义的:SvelteKit With MongoDB ReferenceError: global is not defined

但我不能使用他的解决方案,将其放在一个端点,因为我需要DailyIframe和来自客户端的麦克风音频流来创建一个视频会议室
另外,为什么某些库Daily(以及其他相关的Stackoverflow帖子,MongoDB)首先抛出这个错误,而其他库可以安全使用?
无论如何建议是赞赏!

ilmyapht

ilmyapht1#

为什么?
Vite不包括节点内置变量的垫片。
阅读建议以了解:

无论如何建议是赞赏!
index.html中添加:

<script>
  var global = global || window;
</script>

例如App.svelte

<script>
import { onMount } from 'svelte'
import DailyIframe from '@daily-co/daily-js'
    
onMount(async () => {
  let callObject = DailyIframe.createFrame()
  const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
  let recorder = new MediaRecorder(stream)
  recorder.start()
})
</script>

演示

https://stackblitz.com/edit/sveltekit-1yn6pz?devtoolsheight=33
日志预览

相关问题