簡體   English   中英

在開發過程中,如何在本地運行我的 cloudflare worker 無服務器功能?

[英]How to locally run my cloudflare worker serverless function, during development?

我根據https://serverless.com/framework/docs/providers/cloudflare/guide/設法使用無服務器框架部署了我的第一個 cloudflare worker,當我訪問雲時它正在工作。

在開發過程中,希望能夠在http://localhost:8080/上進行測試 *

啟動本地 http 服務器並使用 serverless.yml 中指定的函數處理我的請求的最簡單方法是什么?

我查看了https://github.com/serverless/examples/tree/master/google-node-simple-http-endpoint但沒有“啟動”腳本。

https://github.com/serverless/上似乎沒有 cloudflare 的例子

目前還沒有辦法在本地運行真正的 Cloudflare Workers 運行時。 Workers 團隊知道開發人員需要這個,但需要做一些工作才能將核心 Workers 運行時與 Cloudflare 軟件堆棧的其余部分分開,否則這些軟件堆棧太復雜而無法在本地運行。

與此同時,您可以嘗試以下幾個選項:

第三方模擬器

Cloudworker是 Cloudflare Workers 的模擬器,在 node.js 之上本地運行。 它是由使用 Workers 的公司 Dollar Shave Club 的工程師構建的,而不是由 Cloudflare 構建的。 由於它是 Workers 環境的完全獨立實現,因此它的行為方式與“真實事物”之間可能存在細微差別。 但是,它足以完成一些工作。

預覽服務 API

可以通過 API 訪問在cloudflareworkers.com上看到的預覽。 使用一些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標頭將被重寫為該協議和主機名。 如果 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 中使用):

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

請注意,上述 API 目前尚未正式記錄,將來可能會更改,但通過在瀏覽器中打開cloudflareworkers.com並查看它發出的請求,更改應該相對容易弄清楚。

您也可以通過將 Cloudflare worker 作為 service worker 加載來在本地進行測試。

筆記:

  • 使用帶 https: 的本地 Web 服務器。 Worker 不會使用 file: 或 http: 協議加載。
  • 你的瀏覽器需要支持 workers,所以你不能使用 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>

Dollar Share Club 創建了Cloudworker 它沒有得到積極維護,但它一種在本地運行 Cloudflare Workers 的方法。

您可以在Cloudflare 博客的客座帖子中閱讀 Cloudworker 原始維護者的相關信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM