[英]How to rebuild node.js addon when source changes
我有一個node.js應用程序,我已經創建了一個本機插件。 (如果您需要背景信息,可以像這樣創建node.js的本機插件)。
在我的開發環境中,我希望它能夠觀察源文件(在這種情況下是C ++源文件),並在C ++源文件更改時自動重建我的插件,並在構建完成后自動重新啟動節點應用程序。
我確信有不止一種方法可以實現這一目標,但我走上了嘗試nodemon的道路。 但我無法弄清楚如何讓nodemon在重新啟動應用程序之前等待構建完成。
我想npm也可以用腳本來做這個,也許用某種手表包。 因此,如果有更容易的事情,我會接受其他方法。
因此,當我的任何源文件發生變化時,我真正需要的是node-gyp build
在重啟工作流中的正確位置運行(停止節點,重新編譯,重啟節點)。 現在它重建插件並重新啟動應用程序, 而無需等待構建完成 ,這是不可取的。
這是我的nodemon.json文件:
{
"watch": [
"addon/"
],
"ignore": [
"addon/build/"
],
"events": {
"restart": "cd addon && node-gyp build"
},
"ext": "js,json,cc,h"
}
這不起作用,因為“重新啟動”就像一個事件,因為運行node-gyp的腳本會觸發並執行,但它不會阻止重新啟動直到構建完成。
我希望它更像中間件,它會在應用程序終止后運行構建腳本,但在重新啟動應用程序之前。 我也咨詢了這個相關的nodemon問題 ,但沒有具體的建議如何實現這一點。
我需要更改一些內容,以便在源更改時自動進行重建(node-gyp步驟),然后重新啟動。
注意:稍后我將對其進行重組,以便它只在相關C ++源文件發生更改時重建插件,並在.js文件更改時重新啟動應用程序而不重建C ++插件,但首先我需要弄清楚獲取節點 - gyp構建步驟在恰當的時間發生。
我通過讓nodemon使用-x
選項來運行npm來解決這個問題。 然后npm腳本可以按順序執行構建和運行腳本。
這是我的package.json的相關部分:
"scripts": {
"dev": "nodemon -x \"npm run buildrun\"",
"buildrun": "npm run build && npm run server",
"build": "echo Building Addon && cd addon && node-gyp build",
"server": "nodemon server.js",
}
你可以通過運行npm run dev
啟動它。
dev
使用-x
選項運行nodemon,命令是npm run buildrun
。 然后每次代碼更改時,nodemon都會重新啟動npm buildrun
腳本。 這是我難以搞清楚的主要部分。
為了解釋其余部分, buildrun
腳本背靠背運行兩個腳本。 第一個( build
)構建插件,第二個( server
)運行服務器。
服務器腳本實際上也運行nodemon:它運行另一個nodemon以使用nodemon server.js
運行服務器腳本。
從技術上講,通過讓npm再次調用nodemon(使用正確的配置文件,不同的參數和上下文),nodemon可以觀察代碼庫的不同部分並重新啟動系統的不同部分(例如,只需查看服務器代碼而無需重建整個插件,這是我的實際代碼。)
通過使用-x
選項調用nodemon並在代碼更改時重新啟動整個構建並運行腳本,我能夠對操作進行排序以使nodemon首先構建插件,等待構建完成,然后運行服務器。
這個nodemon -x \\"npm ...\\"
技術起初對我來說並不明顯,實際上花了我半年時間來提出這個解決方案。 所以,我正在分享這個,因為其他人可能會覺得這種技術很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.