gpt4 book ai didi

cloudflare - 在开发过程中,如何在本地运行我的 cloudflare Worker 无服务器功能?

转载 作者:行者123 更新时间:2023-12-03 02:56:22 28 4
gpt4 key购买 nike

我成功地根据以下内容使用无服务器框架部署了我的第一个 cloudflare Worker https://serverless.com/framework/docs/providers/cloudflare/guide/当我进入云时它正在工作。

在开发过程中,希望能够在 http://localhost:8080/ 上进行测试*

使用 serverless.yml 中指定的函数启动本地 http 服务器并处理我的请求的最简单方法是什么?

我调查了https://github.com/serverless/examples/tree/master/google-node-simple-http-endpoint但没有“启动”脚本。

https://github.com/serverless/ 上似乎没有 cloudflare 的示例

最佳答案

目前还没有办法在本地运行真正的 Cloudflare Workers 运行时。 Workers 团队知道开发人员需要这个,但需要做一些工作才能将核心 Workers 运行时与 Cloudflare 软件堆栈的其余部分分开,否则太复杂而无法在本地运行。

与此同时,您可以尝试以下几个选项:

第三方模拟器

Cloudworker是在 Node.js 之上本地运行的 Cloudflare Workers 模拟器。它是由 Dollar Shave Club 的工程师构建的,该公司使用 Workers,而不是由 Cloudflare 构建。由于它是 Workers 环境的完全独立实现,因此它的行为方式与“真实事物”之间可能存在细微差别。不过,它足以完成一些工作。

预览服务 API

cloudflareworkers.com 上看到的预览可以通过API访问。使用一些 curl 命令,您可以将代码上传到 cloudflareworkers.com 并对其运行测试。这并不是真正的“本地”,但如果你总是连接到互联网,那几乎是一样的。您不需要任何特殊凭据即可使用此 API,因此您可以编写一些使用它来运行单元测试等的脚本。

通过 POST 将名为 worker.js 的脚本上传到 https://cloudflareworkers.com/script:

SCRIPT_ID=$(curl -sX POST https://cloudflareworkers.com/script \
-H "Content-Type: text/javascript" --data-binary @worker.js | \
jq -r .id)

现在 $SCRIPT_ID 将是一个 32 位十六进制数字,用于标识您的脚本。请注意,ID 基于哈希,因此如果您上传完全相同的脚本两次,您将获得相同的 ID。

接下来,生成一个随机 session ID(32 个十六进制数字):

SESSION_ID=$(head -c 16 /dev/urandom | xxd -p)

此 session ID 必须是加密随机的,这一点很重要,因为任何拥有该 ID 的人都可以将开发工具连接到您的预览版并对其进行调试。

我们还定义两个配置:

PREVIEW_HOST=example.com
HTTPS=1

这些指定当您的工作线程运行时,预览应该像在 https://example.com 上运行一样。传入请求的 URL 和 Host header 将被重写为此协议(protocol)和主机名。如果 URL 应为 HTTPS,则设置 HTTPS=1,否则设置 HTTPS=0

现在您可以向您的工作人员发送请求,例如:

curl https://00000000000000000000000000000000.cloudflareworkers.com \
-H "Cookie: __ew_fiddle_preview=$SCRIPT_ID$SESSION_ID$HTTPS$PREVIEW_HOST"

(32 个零可以是任何十六进制数字。在浏览器中使用预览时,这些零是随机生成的,以防止 cookie 和缓存内容干扰 session 。但是,当使用curl 时,这并不重要,因此全零就可以了。)

您可以更改此 curl 行以在 URL 中包含路径、使用不同的方法(例如 -X POST)、添加 header 等。只要主机名和 cookie 如图所示,它将发送到您的预览工作线程。

最后,您可以连接 devtools 控制台在 Chrome 中进行调试(不幸的是,目前仅适用于 Chrome):

google-chrome https://cloudflareworkers.com/devtools/inspector.html?wss=cloudflareworkers.com/inspect/$SESSION_ID&v8only=true

请注意,上述 API 目前尚未正式记录,将来可能会发生变化,但通过在浏览器中打开 cloudflareworkers.com 并查看请求,更改应该相对容易找出它使。

关于cloudflare - 在开发过程中,如何在本地运行我的 cloudflare Worker 无服务器功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53901880/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com