如何在开发过程中在本地运行我的CloudFlare工人无服务器功能,?(How to locally

2019-11-05 09:01发布

我设法使用我的第一个CloudFlare的工人无服务器架构根据部署https://serverless.com/framework/docs/providers/cloudflare/guide/和它工作时,我打了云。

在开发过程中,希望能够以测试HTTP://本地主机:8080 / *

什么是弹出一个本地HTTP服务器,并使用指定的serverless.yml功能处理我的请求,最简单的方法?

我看着https://github.com/serverless/examples/tree/master/google-node-simple-http-endpoint但没有“开始”的剧本。

似乎有对的CloudFlare没有例子https://github.com/serverless/

Answer 1:

目前,没有办法在本地运行真正的CloudFlare工人运行。 工人团队知道,开发人员需要这一点,但它会采取一些工作,核心运行时的工人从CloudFlare的软件栈,这是其他方式太复杂,本地运行的其余部分分开。

在此期间,有一个你可以尝试,而不是一对夫妇的选择:

第三方模拟器

Cloudworker是CloudFlare的工人模拟器上node.js中的顶部在本地运行 它是由在元剃须俱乐部,使用工人,而不是由一个CloudFlare的公司的工程师建造的。 因为它是一个完整的独立执行劳动环境,也有可能是与它的行为与“真命天子”小的差异。 然而,这是不够好,一些工作来完成。

预览服务API

看到预览cloudflareworkers.com可以通过API进行访问。 随着一些curl的命令,你可以上传你的代码cloudflareworkers.com并在其上运行测试。 这不是真正的“本地”,但如果你总是连接到互联网,无论如何,这几乎是相同的。 你不需要任何特殊的证书才能使用这个API,所以你可以写一些脚本,用它来运行单元测试,等等。

上传脚本调用worker.jsPOST至来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 ,如果网址应HTTPS或HTTPS=0如果不是。

现在,您可以发送一个请求,你的工人,如:

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

(32个零可以是任何十六进制数字。当在浏览器中使用预览,这些都是随机产生的,以防止饼干和来自全国各地的会议干扰缓存的内容。当使用卷曲,不过,这并不重要,因此所有零是罚款)。

您可以更改此curl线,包括在URL的路径,使用不同的方法(如-X POST只要),添加页眉等作为主机名和饼干被如图所示,它会去你的预览工人。

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

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

需要注意的是上面的API是不是正式目前记录在案,并可能在未来改变,但变化应该是比较容易通过打开弄清楚cloudflareworkers.com在浏览器中,看着它使请求。



Answer 2:

您还可能能够通过加载的CloudFlare工人作为一个服务人员在本地测试。

注意:

  • 使用本地Web服务器以https:。 工人们将不会加载使用文件:或http:协议。
  • 您的浏览器需要支持员工,所以你不能使用IE浏览器。
  • 嘲笑任何CloudFlare的特定功能,如KV。

 <!doctype html> <html> <head> <meta charset="utf-8"> </head> <body> <!-- Service worker registration --> <script> if ('serviceWorker' in navigator) { // Register the ServiceWorker navigator.serviceWorker.register('/service-worker.js') .then( function(reg) { // Registration succeeded console.log('[registerServiceWorker] Registration succeeded. Scope is ' + reg.scope) window.location.reload(true) }) .catch( function(error) { // Registration failed console.log('[registerServiceWorker] Registration failed with ' + error) }) } else { console.log('[registerServiceWorker] Service workers aren\'t supported') } </script> </body> </html> 



文章来源: How to locally run my cloudflare worker serverless function, during development?