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

时间:2018-04-16 04:37:37

标签: node.js node-gyp nodemon

我有一个node.js应用程序,我已经创建了一个本机插件。 (如果您需要背景信息,可以创建node.js的原生插件like this)。

在我的开发环境中,我希望它能够观察源文件(在这种情况下是C ++源文件),并在C ++源文件发生更改时自动重建我的插件,并在构建完成后自动重新启动节点应用程序。 / p>

我确信有不止一种方法可以实现这一目标,但我走上了尝试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"
}

这不起作用,因为“restart”就像一个事件,因为运行node-gyp的脚本会触发并执行,但它不会阻止重新启动直到构建完成。

我希望它更像中间件,它会在应用程序终止后运行构建脚本,但在重新启动应用程序之前运行。我也咨询了this relevant nodemon issue,但没有具体的建议如何实现这一目标。

我需要更改一些内容,以便在源更改时自动进行重建(node-gyp步骤),然后重新启动。

注意:稍后我将对其进行重组,以便它只在相关C ++源文件发生更改时重建插件,并在.js文件更改时重新启动应用程序而不重建C ++插件,但首先我需要弄清楚在正确的时间让node-gyp构建步骤发生。

1 个答案:

答案 0 :(得分:3)

我通过让 nodemon 使用-x选项运行 npm 解决了这一问题。然后,npm脚本可以依次执行 build run 脚本。

这是我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 ...\"技术对我来说并不明显,实际上我花了半年时间才提出这个解决方案。因此,我之所以分享此信息,是因为其他人可能会发现此技术很有用。