描述問題/錯誤/問題
我們最近從 1.123.6 更新到 1.123.61。我們有一個 OTEL 工作流程用於追蹤自訂指標,它使用程式碼節點和內部使用的 prom-client 程式庫,如下所示 const client = require('prom-client');。由於「找不到模組 ‘prom-client’」的錯誤,這不再起作用。我們啟用了 N8N_METRICS 並且也設定了 NODE_FUNCTION_ALLOW_EXTERNAL 為 "prom-client"。這在 1.123.6 中是有效的。這是迴歸還是重大變更?
請分享您的工作流程
分享最後一個節點傳回的輸出
[
{
“name”: “n8n_learning_progress_achievement_sync_total”,
“description”: “Number of learning progress syncs from achievement webhook”,
“values”: {
“academy”: “faps-fernstudium”,
“testStatus”: “passed”,
“assignment”: 17392228439111
},
“error”: “Cannot find module ‘prom-client’ [line 1, for item 0]”
}
]
您的 n8n 設定資訊
- n8n 版本:1.123.61
- 資料庫(預設值:SQLite):Postgres
- n8n EXECUTIONS_PROCESS 設定(預設值:own、main):own、main
- 透過以下方式執行 n8n(Docker、npm、n8n cloud、桌面應用程式):Docker on render.com
- **作業系統:
@Florian_Glappa
這似乎是一個迴歸問題。
您可以在 Render 上修改 Start Command 來在啟動 n8n 之前安裝該套件:
npm install prom-client && n8n start
或者,您可以將 Docker 映像版本固定回 1.123.6,直到發佈修復程式。
如果您選擇開啟 GitHub issue,可以將其分類為 Regression。
- 受影響的版本:
1.123.61
- 正常工作的版本:
1.123.6
- 環境:Docker
- 問題:
prom-client 不再被提升到根目錄 node_modules,導致 Code nodes 中的 require('prom-client') 中斷,即使設定了 NODE_FUNCTION_ALLOW_EXTERNAL。
Hi @Florian_Glappa ,
這個問題是 n8n 最近依賴套件整合和套件重構更新的附帶影響,而不是對 Code 節點的有意破壞性變更。
為什麼它停止運作:
之前,prom-client 在 n8n 的根 node_modules 中是一個未整合的頂層依賴。設置 NODE_FUNCTION_ALLOW_EXTERNAL=prom-client 允許 Code 節點解析 n8n 的內部副本。在最近的版本中,n8n 更新了其內部套件結構/打包工具(隔離內部依賴),因此 prom-client 不再直接暴露在根 node_modules 目錄中供 Node 的模組解析器找到。
通過 require() 依賴 n8n 的內部子依賴可能在版本更新時破壞,當內部套件移動位置時。
如何修復它(由於你在 Render.com 上通過 Docker 運行):
永久解決方案是在你的 Docker 容器中明確將 prom-client 安裝為外部模組,以便 Node.js 始終可以解析它。
修復 1:自訂 Dockerfile(推薦)
如果你在 Render 上通過 Dockerfile 部署,請更新你的 Dockerfile 以明確安裝 prom-client:
FROM n8nio/n8n:1.123.61
USER root
# 全域安裝 prom-client 以便 Code 節點可以使用它
RUN npm install -g prom-client
USER node
# 確保 NODE_PATH 包含全域模組
ENV NODE_PATH=/usr/local/lib/node_modules
確保你的環境變數保持設置:
NODE_FUNCTION_ALLOW_EXTERNAL=prom-client
修復 2:Render 啟動命令(替代方案)
如果你在 Render 上直接運行官方 n8nio/n8n 映像而不使用自訂 Dockerfile,你可以在啟動 n8n 之前添加啟動指令碼或命令覆蓋:
cd /home/node/.n8n && npm install prom-client && n8n start
一旦在容器環境中明確安裝了 prom-client,你的 Code 節點的 const client = require(‘prom-client’) 將再次順利運作!
謝謝!
@Florian_Glappa 你能分享你的完整設置,包括你如何安裝 npm 套件嗎?你也在使用任務運行器嗎?因為那會改變事情。
我沒有安裝 npm 套件,如文件所述,n8n 是在內部使用該套件,我只是通過我在文章中提到的兩個環境變數來鉤入該功能。
@Florian_Glappa 只是雙重確認一下,在你更新前是 1.123.6 還是 1.123.60?你有使用外部任務運行器嗎?
可能是最近的一些強化步驟阻止了套件載入。
@Florian_Glappa 我做了一些調查,看起来在 1.123.42 版本中停止工作,但在目前最新的測試版本中似乎已經恢復正常,所以如果可能的話,進行 v2 更新可能值得嘗試。
不過,我已經建立了 N8N-10510 作為開發票證,以便看看我們是否能夠解決這個問題。
非常感謝你深入探討這個問題。v2 更新需要進行破壞性變更的研究,這對我們現在來說是不可能的。所以我們期待 N8N-10510 
我看到它已經合併並在 1.123.66 版本中發布了,太好了!不過遺憾的是,這個版本只有 amd 和 arm Docker 映像,沒有通用映像。我想我需要等待那個版本?
我們長時間以來只有這 2 張圖片,你使用的是哪一張?