我设法使用我的第一个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/
目前,没有办法在本地运行真正的CloudFlare工人运行。 工人团队知道,开发人员需要这一点,但它会采取一些工作,核心运行时的工人从CloudFlare的软件栈,这是其他方式太复杂,本地运行的其余部分分开。
在此期间,有一个你可以尝试,而不是一对夫妇的选择:
第三方模拟器
Cloudworker是CloudFlare的工人模拟器上node.js中的顶部在本地运行 它是由在元剃须俱乐部,使用工人,而不是由一个CloudFlare的公司的工程师建造的。 因为它是一个完整的独立执行劳动环境,也有可能是与它的行为与“真命天子”小的差异。 然而,这是不够好,一些工作来完成。
预览服务API
看到预览cloudflareworkers.com可以通过API进行访问。 随着一些curl
的命令,你可以上传你的代码cloudflareworkers.com并在其上运行测试。 这不是真正的“本地”,但如果你总是连接到互联网,无论如何,这几乎是相同的。 你不需要任何特殊的证书才能使用这个API,所以你可以写一些脚本,用它来运行单元测试,等等。
上传脚本调用worker.js
由POST
至来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
在浏览器中,看着它使请求。
您还可能能够通过加载的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?