V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
HUZHUANGZHUANG
V2EX  ›  云计算

我想在 cloudflare 的 worker 中写云函数,涉及到查询的 sdk,那 sdk 依赖问题怎么解决? 第一次写云函数,请大佬们指教一下.我看了很多个模板,都没看到有引入依赖的方式

  •  
  •   HUZHUANGZHUANG · 2023-12-21 08:23:02 +08:00 · 2553 次点击
    这是一个创建于 373 天前的主题,其中的信息可能已经有所发展或是发生改变。
    18 条回复    2023-12-21 17:40:20 +08:00
    cwxiaos
        1
    cwxiaos  
       2023-12-21 08:32:03 +08:00 via iPhone
    用 wrangler, 会将依赖和 main 编译成一个文件
    justin2018
        2
    justin2018  
       2023-12-21 08:57:02 +08:00   ❤️ 1
    Hono - Ultrafast web framework for the Edges

    https://hono.dev/top

    用框架试一试
    HUZHUANGZHUANG
        3
    HUZHUANGZHUANG  
    OP
       2023-12-21 10:28:51 +08:00
    @cwxiaos #1 谢谢大佬指点,我尝试了一下, 我是使用 https://docs.leancloud.cn/sdk/engine/functions/sdk/ 进行数据查询,但是怎么更换在 worker 下面的 src/index.js 中引入 leanengine 或者 leancloud-storage 的方式 代码都无法正常跑起来,总是报一些库内部的错误.暂时先放弃,我用一下二楼的方法试试
    sparkinglemon
        4
    sparkinglemon  
       2023-12-21 10:30:08 +08:00
    https://developers.cloudflare.com/workers/get-started/quickstarts/

    这里面找个例子你就懂了,加一个 wrangler 的配置之后,用相关命令打包。

    (比较另类的解决方式是用 Pages 的 function )
    sparkinglemon
        5
    sparkinglemon  
       2023-12-21 10:33:23 +08:00
    @HUZHUANGZHUANG worker 的 runtime 不一定能兼容你要用的 sdk ,扫了一眼比如 leanengine 就用了 connect 。
    HUZHUANGZHUANG
        6
    HUZHUANGZHUANG  
    OP
       2023-12-21 10:39:31 +08:00
    @sparkinglemon #5 所以我这种查询是不能用 worker 来实现吗?

    大佬,确实是用 leanengine 会出现提示 ✘ [ERROR] service core:user:my-worker-test: Uncaught TypeError: globalThis.XMLHttpRequest is not a constructor 这个问题 最终报错就是在 connect 这个库
    liuhai233
        7
    liuhai233  
       2023-12-21 10:50:51 +08:00
    HUZHUANGZHUANG
        8
    HUZHUANGZHUANG  
    OP
       2023-12-21 10:58:01 +08:00
    @liuhai233 #7 问题在于我是想在 workers 中实现使用 leancloud sdk 进行数据查询,现在依赖加载不起来,查询就执行不起来,用啥都没用吧?
    sparkinglemon
        9
    sparkinglemon  
       2023-12-21 11:09:20 +08:00
    @HUZHUANGZHUANG sdk 实现方式看起来希望不大,比如 XMLHttpRequest worker 就没实现,worker 兼容性你可以看下这两个链接:

    https://developers.cloudflare.com/workers/runtime-apis/
    https://developers.cloudflare.com/workers/runtime-apis/nodejs/

    但是因为有 fetch ,所以可以通过 restapi 的方式来自己适配
    v2yllhwa
        10
    v2yllhwa  
       2023-12-21 11:09:30 +08:00 via Android
    可以试试用 fetch pollyfill 一个 XMLHttpRequest 。
    wdssmq
        11
    wdssmq  
       2023-12-21 11:23:10 +08:00
    cf 自己有对应 leancloud 各种产品生态位的东西。。KV ,D1 之类的
    type
        12
    type  
       2023-12-21 11:29:37 +08:00
    @sparkinglemon
    (比较另类的解决方式是用 Pages 的 function )
    -----
    这个可以细讲一下么
    Uyloal
        13
    Uyloal  
       2023-12-21 11:32:01 +08:00
    @HUZHUANGZHUANG #6 CF Worker 是边缘 Function ,Runtime 是类似于浏览器的执行环境,基本上依赖了 NodeJS 能力的库都不能用。
    sparkinglemon
        14
    sparkinglemon  
       2023-12-21 11:41:58 +08:00   ❤️ 1
    @type pages 最简单的部署就是随便搞个 vite 的项目打包对吧,但是如果想在同一个项目下提供几个接口,就可以在根目录下新建一个“functions”目录,这目录下的 js/ts 会被自动识别为 worker 的函数,在边缘执行提供部分的服务端能力(也可以对接 D1 ,KV 这套东西),也能基于命名规则做一些中间件。

    我个人体验下来会比纯 worker 项目顺手些,而且能同时兼顾页面和接口,避免需要分离拆成两个项目。
    type
        15
    type  
       2023-12-21 11:57:40 +08:00
    @sparkinglemon 明白了,感谢!
    HUZHUANGZHUANG
        16
    HUZHUANGZHUANG  
    OP
       2023-12-21 16:57:34 +08:00
    @sparkinglemon #14 我想问一下,这个另类的方法是不是也解决不了涉及到第三方 sdk 调用的情况?
    sparkinglemon
        17
    sparkinglemon  
       2023-12-21 17:25:22 +08:00
    @HUZHUANGZHUANG 解决不了,你的情况,问题在于你要用的包本身在 worker 的环境下就运行不了…… worker 还是适合直接调用第三方 api 的情况,很少有专门适配过的 sdk
    HUZHUANGZHUANG
        18
    HUZHUANGZHUANG  
    OP
       2023-12-21 17:40:20 +08:00
    @sparkinglemon #17 好的,感谢回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2757 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:59 · PVG 17:59 · LAX 01:59 · JFK 04:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.