javascript - 将 "@daily-co/daily-js"导入 SvelteKit 应用程序会引发 "global is not defined"错误

标签 javascript node.js vite sveltekit

我尝试过的:

  1. 我尝试通过 if (browser) 解决这个问题, 进一步来说{ if (!browser) { let DailyIframe = await import('daily-co/daily-js) }在load函数里面<script context="module"> )因此代码始终在服务器上执行)。然后将其作为 prop 传递给组件。然而,虽然它在服务器上工作,但本地开发环境重新运行加载函数(它必须返回一个空 Prop ,因为它从未导入任何东西)并覆盖 DailyIframe 的值(可能是 Vite/SvelteKit 的错误)。

  2. 我尝试在端点导入库,例如api.json.js相反,它总是在服务器上执行。但是,它必须返回一个 json,并且我无法将整个库变量传递给它。

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

但我无法使用他将其放入端点的解决方案,因为我需要来自客户端的 DailyIframe 和麦克风音频流来创建视频 session 室

此外,为什么某些库 Daily(并查看其他相关的 Stackoverflow 帖子、MongoDB)会首先抛出此错误,而其他库可以安全使用?

无论如何,建议表示赞赏!

最佳答案

Why ?

Vite 不包含 Node 内置变量的垫片。

阅读建议以了解:

Anyway suggestion is appreciated!

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

logs preview

logs preview of the room connection

关于javascript - 将 "@daily-co/daily-js"导入 SvelteKit 应用程序会引发 "global is not defined"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70222804/

相关文章:

javascript - 如何在不影响行的情况下将 margin-top 设置为元素?

javascript - Bootstrap Carousel 过渡仅悬停

node.js - TypeScript 构建为单个文件,其中包含所有外部依赖项(node_modules)

python - 运行带有 pm2 错误的 python 脚本

c++ - 可以构建自定义 node.js 插件但不能包含

javascript - 操作 DOM 子项的有效方法

javascript - 在 jQuery 中编辑行和动态 id 问题?

reactjs - Vite、NPM、React 组件库 无效的 hook 调用、外部问题?

reactjs - 从 CRA(create react app) 迁移到 vite 后,未定义缓冲区

typescript - 类型错误 : EventEmitter is not a constructor at new MapboxGeocoder