N8n 自訂節點 / 子工作流程(從 Node-RED 遷移)

嘿!
我目前使用 Node-RED 進行自動化,並考慮遷移到 n8n。我建立了自訂的建構塊,例如使用 node red api - 其中一些是用 .js/.html 編寫的,有些是子流程。它們都打包在一個 npm 套件中。我知道我們可以在 n8n 中用 TypeScript 建立自訂節點,所以我認為對於 JS/HTML 中的節點不會有問題,但對於子流程節點呢,有沒有特定的方式將它們遷移到 n8n 子工作流程?其中一些很複雜,有些基本上就是 http 請求等等。我想知道是否有類似於 Node-RED 中的選項,可以將它們全部放在一個 npm 套件中,或者我應該有一個用於遷移到 TS 的節點的 npm 套件,然後將子流程的節點通過源代碼控制拉入 n8n 實例中?N8n 方案 → 企業版,如果我們決定遷移的話。

還有另一個話題,你認為有沒有辦法快速將節點/工作流程從 node-red 遷移到 n8n,而不是手動進行?
我真的很感謝你的幫助!謝謝!

:slight_smile:

Hi @Michal_12312312,歡迎來到 n8n 社群!

我已經做過幾次從 Node-RED 到 n8n 的遷移,實踐中效果最好的對應關係是:
– 自訂 JS/HTML 節點 → n8n 自訂節點(TypeScript,作為 npm 套件發佈)
– 子流程 → n8n 子工作流程,作為普通工作流程管理,並通過 Git/原始碼控制進行版本控制,而非 npm。

關於子流程:在 n8n 中,我會為每個「構建區塊」建立一個工作流程,以執行子工作流程觸發器開始,然後使用執行子工作流程從其他流程呼叫它。這樣你幾乎可以獲得 Node-RED 中的相同可重用性,但具有更清晰的輸入/輸出契約。

據我所知,沒有自動化的 Node-RED → n8n 轉換器,所以我見過最快的方法是:

  1. 將低階 API 邏輯移植到 1 個自訂節點套件,

  2. 將高價值的子流程重建為子工作流程,

  3. 然後在那些新的構建區塊基礎上重新實現個別流程。

如果你願意分享一個小的示例子流程/自訂節點,我很樂意在你提交整個遷移之前展示 1:1 的 n8n 等效物是什麼樣的。

非常感謝!@nguyenthieutoan 當涉及到子工作流程時,我也在考慮使用 Web Hook 觸發器來執行其中一些,而對於其他的則使用另一個工作流程觸發器,具體取決於功能。例如,登入建塊會使用 Web Hook,而 SQL 查詢則會在另一個工作流程觸發器執行時使用。真正的問題是版本管理(npm 套件當然很簡單 - 我說的是作為子工作流程的 BBs)以及跨 n8n 執行個體的發佈機制。至於自訂節點,我假設我們會在 GitHub 上有一個私有倉庫(以及 rpm 套件),所有自訂節點都在一個套件中,我想 CI/CD 管線會將它們烘焙到 n8n 的 Docker 映像中,並將這些映像推送到例如 AWS ECR,然後我們會使用 ArgoCD 將它們分散到各個 Pod。

你有什麼建議關於這些 node-red 節點作為子工作流程時的樣子嗎?

謝謝!現在我理解多了,肯定會考慮這些 :slight_smile:

歡迎加入 n8n 社群 @Michal_12312312

這份文件會幫助你 Sub-workflow conversion | n8n Docs
你需要手動調整 Start 和 Return 節點上的輸入/輸出類型;對 AI 的支援有限,first()、last() 和 all() 等函數在轉換後可能需要檢查。

我假設可以連接你的 n8n 帳戶/實例?到 GitHub repo 並加上子工作流,它會將它們拉入 n8n?這只在企業方案和管理員帳戶類型上可用,對吧?@nguyenthieutoan @tamy.santos

有沒有辦法不使用 ArgoCD?子工作流能不能像 nodered 一樣打包成節點?分散到各個實例上的最佳方式是什麼(由另一個工作流執行時觸發的子工作流)?

提前謝謝!

Michal,大多是對的,但並非完全是「僅限企業版」:n8n 原始碼控制是商業版/企業版功能,且連線由所有者/管理員設定。將其視為工作流程/環境同步,而不是子工作流程的套件管理程式。

關於發佈,請拆分這些部分:自訂節點用於需要版本控制並跨執行個體安裝的程式碼;子工作流程用於團隊可能在 n8n 中編輯的編排。關鍵細節是執行個體形狀:這是一個具有專案的共享 n8n 執行個體,還是需要保持相同區塊版本同步的個別客戶/團隊執行個體?

我們還沒有做出那個決定。最有可能的是,每個開發者都會有自己的實例來開發流程。

如果每個開發人員都有個別的執行個體,風險就是版本漂移。不要把子工作流程當作共用程式庫;一旦人們開始編輯它們,它們就會變成本地副本。

將可重複使用的程式碼保留在自訂節點中,並明確進行工作流程/子工作流程的推廣:開發執行個體 → 審查的匯出/版本控制變更 → 共用暫存/生產環境。已批准的流程最終是登陸到一個中央執行個體,還是每個開發人員都保留自己的副本?

@oesterreicher-0417 直接回答你的問題:是的,n8n 可以連接到 GitHub 儲存庫,但那是原始碼控制功能(商業版/企業版),設計用於在環境之間同步工作流程(dev → staging → prod),而不是作為套件管理器。

如果要在沒有 ArgoCD 的情況下跨實例分發子工作流程,我用過最輕量的方法是透過 n8n API 匯出子工作流程 JSON(GET /api/v1/workflows/{id}),然後用一個小指令稿或專門的 n8n 工作流程將其匯入每個目標實例,在每個實例上呼叫 POST /api/v1/workflows。你仍然在 Git 中版本控制 JSON,但「部署」只是一個 API 呼叫,而不是 GitOps 管道。

關鍵限制 @olmrqs_ops 已經指出的就對了:一旦人們在本地編輯子工作流程,它就會漂移。我會在開發實例上將共享子工作流程鎖定為唯讀存取(如果可以的話),或至少強制採用像 [SHARED] - WorkflowName 這樣的命名慣例,讓團隊知道不要就地編輯它。