目前,没有办法在本地运行真正的 Cloudflare Workers 运行时。Workers 团队知道开发人员需要这个,但是将核心 Workers 运行时与 Cloudflare 的其他软件堆栈分开需要一些工作,否则这太复杂而无法在本地运行。
与此同时,您可以尝试以下几个选项:
第三方模拟器
Cloudworker是在 node.js 上本地运行的 Cloudflare Workers 模拟器。它是由使用 Workers 的公司 Dollar Shave Club 的工程师建造的,而不是由 Cloudflare 建造的。由于它是 Workers 环境的完全独立实现,因此它的行为方式与“真实事物”之间可能存在细微差别。但是,完成一些工作就足够了。
预览服务 API
在cloudflareworkers.com上看到的预览可以通过 API 访问。使用一些curl
命令,您可以将代码上传到 cloudflareworkers.com 并在其上运行测试。这不是真正的“本地”,但如果你总是连接到互联网,那几乎是一样的。您不需要任何特殊凭据即可使用此 API,因此您可以编写一些脚本来使用它来运行单元测试等。
worker.js
将通过POST
ing调用的脚本上传到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。
接下来,生成一个随机会话 ID(32 个十六进制数字):
SESSION_ID=$(head -c 16 /dev/urandom | xxd -p)
此会话 ID 必须是加密随机的,这一点很重要,因为任何拥有该 ID 的人都可以将 devtools 连接到您的预览版并对其进行调试。
让我们也定义两个配置:
PREVIEW_HOST=example.com
HTTPS=1
这些指定当您的工作人员运行时,预览应该像在https://example.com
. 传入请求的 URL 和Host
标头将被重写为此协议和主机名。设置HTTPS=1
URL 是否应该是 HTTPS,或者HTTPS=0
不是。
现在您可以向您的工作人员发送请求,例如:
curl https://00000000000000000000000000000000.cloudflareworkers.com \
-H "Cookie: __ew_fiddle_preview=$SCRIPT_ID$SESSION_ID$HTTPS$PREVIEW_HOST"
(这 32 个零可以是任何十六进制数字。在浏览器中使用预览时,这些零是随机生成的,以防止 cookie 和缓存的内容在会话之间产生干扰。但是,当使用 curl 时,这无关紧要,所以全零没问题。)
您可以更改此curl
行以在 URL 中包含路径、使用不同的方法(如-X POST
)、添加标头等。只要主机名和 cookie 如图所示,它将转到您的预览工作人员。
最后,您可以连接 devtools 控制台在 Chrome 中进行调试(不幸的是,目前只能在 Chrome 中使用):
google-chrome https://cloudflareworkers.com/devtools/inspector.html?wss=cloudflareworkers.com/inspect/$SESSION_ID&v8only=true
cloudflareworkers.com
请注意,上述 API 目前尚未正式记录,并且将来可能会更改,但是通过在浏览器中打开并查看它发出的请求,应该相对容易找出更改。