我正在用Svelte 3.44和SvelteKit编写一个应用程序。我想用Userbase(https://userbase.com/)来进行用户身份验证和数据存储。
我有一个组件 Login.svelte,想在其中调用Userbase API进行注册登录,相关代码为:
<script lang="ts">
import userbase from 'userbase-js';
/* Irrelevant code here */
</script>
当我尝试使用vite dev
运行此程序时,我看到的不是Login组件,而是:
500
Module "buffer" has been externalized for browser compatibility. Cannot access "buffer.Buffer" in client code.
get@http://localhost:5173/node_modules/.vite/deps/userbase-js.js?v=b25ad0c3:151:17
node_modules/safe-buffer/index.js@http://localhost:5173/node_modules/.vite/deps/userbase-js.js?v=b25ad0c3:162:19
__require@http://localhost:5173/node_modules/.vite/deps/chunk-TWLJ45QX.js?v=b25ad0c3:8:50
node_modules/randombytes/browser.js@http://localhost:5173/node_modules/.vite/deps/userbase-js.js?v=b25ad0c3:225:19
__require@http://localhost:5173/node_modules/.vite/deps/chunk-TWLJ45QX.js?v=b25ad0c3:8:50
node_modules/diffie-hellman/lib/generatePrime.js@http://localhost:5173/node_modules/.vite/deps/userbase-js.js?v=b25ad0c3:3272:23
__require@http://localhost:5173/node_modules/.vite/deps/chunk-TWLJ45QX.js?v=b25ad0c3:8:50
node_modules/diffie-hellman/browser.js@http://localhost:5173/node_modules/.vite/deps/userbase-js.js?v=b25ad0c3:3554:25
__require@http://localhost:5173/node_modules/.vite/deps/chunk-TWLJ45QX.js?v=b25ad0c3:8:50
@http://localhost:5173/node_modules/.vite/deps/userbase-js.js?v=b25ad0c3:6166:37
浏览解决方案时,我发现了两个,但都不起作用:
1.在OnMount()中使用动态导入似乎可以,但是由于TypeScript类型检查,我无法在OnMount()之外的任何地方使用导入的模块。
1.从index.html添加Userbase SDK并使用window.userbase
调用它不起作用,因为我得到了ReferenceError: window is not defined
。
总结一下:如果有人克服了Cannot access "buffer.Buffer" in client code
问题,请告诉我你是怎么做到的。如果这是一个愚蠢的问题,请原谅,我是一个嵌入式开发人员,这是我第一次接触Web开发。
3条答案
按热度按时间yhived7q1#
我也遇到过同样的问题,而且我已经解决了!
1.按照@H.B.的正确建议安装
buffer
软件包:$ npm i buffer
1.将以下代码段添加到您的
index.html
:从这个GitHub评论中得到了这个小宝石
到目前为止,我的组件逻辑是:
版本:
5n0oy7gb2#
我无法重现这个问题,也许你使用的是不同版本的Vite。你可以尝试通过将
buffer
添加到ssr.noExternal
来防止buffer
被外部化。我得到了一个不同的错误,它也建议模块应该只在浏览器中导入。
访问
onMount
之外的内容只是一个类型或作用域问题。如果您将其导入到组件中,您可以在onMount
之外声明一个变量。在导入完成之前,它将是未定义的:如果您在其他地方全局导入脚本,您应该能够访问
window.userbase
,模块的类型声明文件已经定义了这一点:gfttwv5a3#
这个想法可能会有所帮助:Module "util" has been externalized for browser compatibility. Cannot access "util.promisify" in client code类似于以下内容: