在工廠、內網或無法連網的環境下,如何幫 Node-RED 安裝 palette 節點?本教學以 node-red-contrib-s7
為例,說明最穩定的npm pack + 分層離線安裝流程。
1. 前置說明
- 線上端:可連網、有 npm 的主機(版本建議與離線端相近)
- 離線端:實際運行 Node-RED 的主機,通常在 Docker 容器內
- 範例:
node-red-contrib-s7
節點需依賴 @st-one-io/nodes7
,而 @st-one-io/nodes7
又依賴 iso-on-tcp
2. 線上端:收集與打包所有所需套件
步驟一:建立乾淨目錄
mkdir s7-offline
cd s7-offline
步驟二:安裝並查詢所有依賴
npm init -y
npm install node-red-contrib-s7
npm ls --all --parseable > all_deps.txt
步驟三:針對每個出現在 all_deps.txt
的套件執行打包
例如這三個:
- node-red-contrib-s7
- @st-one-io/nodes7
- iso-on-tcp
依序執行:
npm pack node-red-contrib-s7
npm pack @st-one-io/nodes7
npm pack iso-on-tcp
產生的三個 .tgz
檔案如下:
node-red-contrib-s7-3.1.0.tgz
st-one-io-nodes7-1.1.0.tgz
iso-on-tcp-0.1.0.tgz
3. 將 .tgz
檔案帶到離線端主機
可用隨身碟、內網傳檔等方式,將所有 .tgz
檔案複製到 Node-RED 資料夾(通常是 /data
)。
4. 離線端:分層本地安裝所有套件
步驟一:進入 Node-RED Docker 容器
docker exec -it nodered bash
cd /data
※ 若你的 Node-RED 資料夾不是 /data
,請依實際目錄調整
步驟二:依賴順序安裝所有套件
一定要從最底層依賴開始安裝!
npm install ./iso-on-tcp-0.1.0.tgz --unsafe-perm
npm install ./st-one-io-nodes7-1.1.0.tgz --unsafe-perm
npm install ./node-red-contrib-s7-3.1.0.tgz --unsafe-perm
步驟三:重啟 Node-RED 容器
exit
docker restart nodered
5. 驗證與補充說明
- 進入 Node-RED 網頁編輯頁,palette 應可找到「S7」相關節點。
- 如 palette 沒顯示或遇到 node 版本差異導致錯誤,可於
/data
目錄下執行 npm rebuild --unsafe-perm
後再重啟。
- 遇到更深層依賴缺漏時,重複上述「線上端查依賴→pack→離線端裝」即可。
6. 延伸技巧
- 大規模部署可直接將線上 node_modules、package.json、package-lock.json 全部複製到離線端
/data
,重啟即可,不用再 npm install。
- yarn 用戶可使用 yarn 的
offline-mirror
功能更自動化。
- 對其他 Node-RED palette 節點,也可用同樣流程操作。
7. 常見問題
- npm install 還想上網?
通常是漏 pack 了某個依賴,請務必全部 .tgz 打包齊全,且安裝順序由底層往上。
- Palette 沒有新節點?
通常是裝錯路徑、或有編譯問題,請檢查 npm 有無報錯,或手動 npm rebuild
。
8. 總結
Node-RED palette 節點離線安裝流程只要掌握「收集全部依賴 + 逐層 pack + 逐層安裝」原則,任何環境都能順利部署,不怕沒網路。