如何在开发过程中本地运行cloudflare worker无服务器功能?

如何在开发过程中本地运行cloudflare worker无服务器功能?,cloudflare,serverless-framework,serverless,cloudflare-workers,serverless-plugins,Cloudflare,Serverless Framework,Serverless,Cloudflare Workers,Serverless Plugins,我根据 当我撞到云端时,它正在工作 在开发过程中,希望能够在* 使用serverless.yml中指定的函数启动本地http服务器并处理我的请求的最简单方法是什么 我调查 但是没有“开始”脚本 目前似乎没有cloudflare on的示例,无法在本地运行真正的cloudflare Workers运行时。Workers团队知道开发人员需要这一点,但要将核心Workers运行时与Cloudflare软件堆栈的其余部分分离需要一些工作,否则会太复杂,无法在本地运行 同时,您可以尝试以下几个选项: 第三

我根据 当我撞到云端时,它正在工作

在开发过程中,希望能够在*

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

我调查 但是没有“开始”脚本


目前似乎没有cloudflare on的示例,无法在本地运行真正的cloudflare Workers运行时。Workers团队知道开发人员需要这一点,但要将核心Workers运行时与Cloudflare软件堆栈的其余部分分离需要一些工作,否则会太复杂,无法在本地运行

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

第三方仿真器 是Cloudflare Workers的模拟器,在node.js上本地运行。它是由Dollar Shave Club的工程师建造的,该公司使用工人,而不是Cloudflare。因为它是Workers环境的一个完整的独立实现,所以它的行为方式与“真实的东西”之间可能会有细微的区别。然而,这足以完成一些工作

预览服务API 在上看到的预览可以通过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\u ID
将是一个32位十六进制数字,用于标识脚本。请注意,该ID基于散列,因此如果您两次上载完全相同的脚本,您将获得相同的ID

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

此会话ID必须是加密随机的,这一点很重要,因为具有该ID的任何人都可以将devtools连接到预览并对其进行调试

我们还将定义两个配置:

PREVIEW_HOST=example.com
HTTPS=1
这些命令指定当工作程序运行时,预览应该像在
https://example.com
。传入请求的URL和主机头将重写为此协议和主机名。如果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和缓存内容干扰会话。但在使用curl时,这并不重要,所以所有零都可以。)

您可以更改此
curl
行以在URL中包含路径,使用其他方法(如
-X POST
),添加标题等。只要主机名和cookie如图所示,它将转到预览工作程序

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


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

您还可以通过将Cloudflare worker作为服务工作者加载来进行本地测试

注:

  • 使用带有https的本地web服务器:。worker不会使用file:或http:协议加载
  • 您的浏览器将需要支持Worker,因此您不能使用IE
  • 模拟任何Cloudflare特定的功能,例如KV

if(导航器中的“serviceWorker”){
//注册服务人员
navigator.serviceWorker.register('/service worker.js')
.那么(
功能(reg){
//注册成功
console.log(“[registerServiceWorker]注册成功。作用域为“+reg.Scope”)
window.location.reload(true)
})
.接住(
函数(错误){
//注册失败
console.log('[registerServiceWorker]注册失败,出现'+错误)
})
}否则{
console.log(“[registerServiceWorker]服务工作者不受支持”)
}
已创建美元共享俱乐部。它不是主动维护的,但它是在本地运行Cloudflare Workers的一种方式


您可以在Cloudworker的原始维护者的来宾帖子中阅读相关内容。

感谢您的精彩回答。预览服务API选项打开了一些有趣的门,将在某个时候尝试使用它。是否有任何方法添加
wasm
模块?@Edouard是,cloudflareworkers.com/script API也支持用于将script+WASM模块上载到常规Cloudflare API的多部分/表单数据格式。只是想让您知道,()处的文档中有一个小错误,使用
application/javscript
而不是
application/javascript
(API调用部分)。
curl https://00000000000000000000000000000000.cloudflareworkers.com \
  -H "Cookie: __ew_fiddle_preview=$SCRIPT_ID$SESSION_ID$HTTPS$PREVIEW_HOST"
google-chrome https://cloudflareworkers.com/devtools/inspector.html?wss=cloudflareworkers.com/inspect/$SESSION_ID&v8only=true