簡體   English   中英

如何在源更改時重建node.js插件

[英]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.

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