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

2023-12-23

我有一个 node.js 应用程序,并且创建了一个本机插件。 (如果您需要背景信息,可以创建 Node.js 的本机插件像这样 https://nodejs.org/api/addons.html).

在我的开发环境中,我希望它监视源文件(在本例中是 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问题 https://github.com/remy/nodemon/issues/310,但没有关于如何实现这一点的具体建议。

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

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


我解决了这个问题nodemon使用-x运行选项npm。然后npm脚本可以执行build and 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运行nodemon-x选项和命令是npm run buildrun。然后nodemon重启npmbuildrun每次代码更改时都编写脚本。这是我无法弄清楚的主要部分。

为了解释其余部分,buildrunscript 连续运行两个脚本。第一个 (build)构建插件和第二个(server)运行服务器。

服务器脚本实际上也运行nodemon:它运行另一个nodemon来运行服务器脚本nodemon server.js.

从技术上讲,通过让 npm 再次调用 nodemon(使用正确的配置文件、不同的参数和上下文),nodemon 可以 观察代码库的不同部分并重新启动不同部分 系统的(例如,仅观察服务器代码而不重建 整个插件,这就是我的实际代码所做的。)

通过使用以下命令调用nodemon-x选项并让整个构建和运行脚本在代码更改时重新启动,我能够对操作进行排序以使 nodemon 首先构建插件,等待构建完成,然后运行服务器。

This nodemon -x \"npm ...\"起初,技术对我来说并不明显,实际上我花了半年时间才想出这个解决方案。所以,我分享这个是因为其他人可能会发现这个技术很有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

源更改时如何重建 Node.js 插件 的相关文章

  • Grunt-browserify+mapify+coffeescript = 未通过相对路径找到模块

    我尝试让 grunt browserify 使用 Coffeescript 的相对路径 但当我尝试构建源代码时总是收到错误消息 gt gt Error module src app utils includeMixin not found
  • 在 WSL Ubuntu 20.04 上安装 npm 后,我收到消息“/usr/bin/env: ‘bash\r’: No such file or directory”

    运行时我看到以下消息npm install or npm来自终端的命令 执行中node按预期工作 gt npm install usr bin env bash r No such file or directory 2023 年 7 月更
  • Node.js + Socket.io + Windows 7 / 8?

    我一直在到处寻找 但似乎找不到解决方案 是否可以在 Windows 7 上的 Node js 上安装 Socket io 如果没有 是否有某种替代方案 或者您知道未来有任何 Windows 支持吗 通常使用 Node js 包管理器 但是我
  • keystonejs 模型中的动态类型选择

    我想在 adminUI 中使用一个组合框 其中包含来自 Web 服务的字段 我正在考虑使用预 查找 挂钩获取数据 然后覆盖模式中 受众 属性的选项属性 Schema Compliance add title type Types Text
  • node-mongodb-native的插入性能

    我正在使用 MongoDB 测试 Node js 的性能 我知道其中每一个都很好 彼此独立 但我正在尝试一些测试来感受它们 我遇到了这个问题 但无法确定来源 问题 我正在尝试在单个 Node js 程序中插入 1 000 000 条记录 它
  • Google API、drive.files.list 和仅返回子文件

    我正在使用 谷歌API https www npmjs com package googleapis NodeJS 中的库 我试图返回当前指定文件夹中的文件和文件夹列表 但我发现drive files list返回用户已被授予读取权限的所有
  • TypeError [ERR_INVALID_ARG_TYPE]:“listener”参数必须是 Function 类型

    我这里有一个小问题 events js 200抛出新错误 ERR INVALID ARG TYPE listener Function listener 类型错误 ERR INVALID ARG TYPE 侦听器 参数必须是类型 功能 收到
  • AJAX 发送数据到 Node.js 服务器

    我尝试使用 AJAX 将数据发送到 Node js 服务器 但不断遇到同样的问题 即接收问题 这是客户端 JavaScript AJAX 代码 var objects function return new XMLHttpRequest f
  • 通过 PHP 连接到 socket.io(nodejs)

    我需要通过 php 连接到 websocket 发送数据并立即断开连接 无需等待套接字的响应 我用了大象io http elephant io 但更新库后不起作用 请告诉我如何通过 PHP 连接到 websocket 我也遇到了这个问题 学
  • Heroku ENOENT:没有这样的文件或目录,stat '/app/build/index.html'

    我在 Heroku 中运行一个简单的测试站点时遇到问题 由于某种原因 当我希望它从 build 提供服务时 它试图从 app build 提供内容 错误 ENOENT 没有这样的文件或目录 stat app build index html
  • NodeJs读取JSON文件

    我正在使用 NodeJs 读取 json 文件 我的代码非常基本 var obj require sample json console log obj 0 Sample json 文件包含这样的字符串化 JSON sample good
  • 如何上传文件 - sails.js

    我可以下载图像和 pdf 但无法下载文档文件 doc pptx odt 下载文档 doc pptx odt 时 仅将其下载为 ZIP XML 文件 我可以做什么 我在用着 填写上传文件文档 https github com balderda
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • Morgan Logger + Express.js:写入文件并在控制台中显示

    我正在尝试将 Morgan 与 Express js 结合使用来编写日志文件 同时也在控制台上显示我的日志 我正在使用这段代码 var logger require morgan var accessLogStream fs createW
  • 使用 TFS 2015 运行 Jest 单元测试

    有人尝试将 jest 单元测试与 TFS 2015 集成吗 我尝试使用 Chutzpah 测试适配器 https visualstudiogallery msdn microsoft com f8741f04 bae4 4900 81c7
  • at=错误代码=H12 desc=node.js中的请求超时。如何处理?

    2020 07 21T06 54 58 030920 00 00 heroku 路由器 at error code H12 gt desc Request timeout 方法 获取路径 食谱 主机 desolate beach 26163
  • 使用 Nodemailer 提交电子邮件时 NodeJs 错误

    我已按照以下步骤设置 Nodemailer 1 允许访问 Gmail 中安全性较低的应用程序 2 在app js中写入以下内容 app post reachus send function req res var transporter n
  • 为 npm install 添加本地项目依赖

    在 npm 中添加本地项目依赖项的正确语法是什么package json file 我本地有 git 项目C projects MyApp 我想得到这个项目npm install 我尝试以下 dependencies my app file
  • NodeJs 环境变量与配置文件

    实际上 我有一个 NodeJS Express 应用程序 其配置文件包含主机 端口 JWT 令牌 数据库参数等参数 问题是 将这些参数直接保留在环境变量上 没有任何配置文件 并访问它们 而不需要在所有组件和模块中进行 require 配置是
  • 函数不会等到 Promise 得到解决

    我正在开发一个简单的不和谐机器人 我正在尝试打印有关某个玩家的一些一般数据 我最近了解了 async await 并尝试将其实现到我的代码中 然而 它似乎不起作用 因为当我第一次触发此代码时 它会打印 null 但在后续触发时 它将打印正确

随机推荐

  • 如何使用 parsley.js 模式标签?

    我如何添加attr data parsley pattern 正确标记到输入 我写了这个
  • 如何使用多个工作人员加速批量导入谷歌云数据存储?

    我有一个基于 apache beam 的数据流作业可以使用VCF源 https github com apache beam blob master sdks python apache beam io vcfio py从单个文本文件 存储
  • 如何将查询结果(单个文档)存储到变量中?

    我想将单个文档保存到 Mongo JS shell 中的变量中 并为后续操作操作文档 读 写多个属性 但 Mongo JS 似乎没有将任何内容放入变量中 gt a db col find limit 1 id ObjectId 52dfcc
  • FileUpload 问题 - 多部分文件为空值

    我正在开发一个 Spring Web 应用程序 需要为我的页面之一实现一个简单的 FileUpload JSP 页面包含以下代码片段 其中包括用于上传文件的上传字段
  • 在 Go 中跨包访问变量

    我的范围内有两个变量package main 那些将是这些 var app Application cfg Config 现在 由于我的应用程序的大小开始增加 我决定将网站的每个模块放在自己的包中 就像子目录一样 src github co
  • 当客户端使用Cache-Control时,它意味着什么?

    我以为我理解 Http 标头 Cache Control max age 3600 的含义 但后来我在客户端请求中遇到它 如下所示 Cache Control max age 0 我不完全确定从客户的角度来看这意味着什么 任何见解都会很棒
  • 派生镜像时继承了哪些Dockerfile指令?

    假设我有两个 Dockerfile 用于创建带有各自标签的映像 Dockerfile A FROM some image EXPOSE 9000 ENTRYPOINT some script sh and Dockerfile B FROM
  • C++ 中的唯一数字[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试有效地列出 1 到 100
  • 同像性,它是如何运作的?

    有人可以推荐解释同像性概念的文章 尤其是使用 Clojure 的文章 为什么 Clojure 是同音的 但在 Java 等其他语言中却很难做到这一点 在我继续讨论一些我想添加另一个答案的事情之前 这里还有一个参考 与同像性相关的部分相当短
  • TinyMCE file_picker_callback 从默认浏览器文件选择中选择图像

    我在项目中使用 TinyMCE 并希望用户使用其默认插入图像窗口选择图像并将其上传到服务器 我想点击以下按钮 打开浏览器默认文件选择窗口并将所选图像添加到编辑器中 到目前为止我的代码如下 JS tinymce init selector h
  • while(!(cin >> x)) 如何重新提示输入

    while cin gt gt ar i cin clear clears bad input while cin get n continue cout lt lt Invalid input please enter valid sco
  • byte[] 数组上的 GetHashCode()

    什么是GetHashCode 调用时计算byte 大批 具有相同内容的 2 个数据数组不提供相同的哈希值 NET 中的数组不会覆盖Equals or GetHashCode 因此您将获得的值基本上基于引用相等性 即默认实现Object 为了
  • 等待动画、渲染完成 - XAML 和 C#

    我遇到的情况是 我正在对 XAML 应用程序的一部分进行动画处理 并且我需要等待动画和渲染完成 然后才能继续编写代码 到目前为止 我的函数的尾部如下所示 ProcExpandCollapse Begin while ProcExpandCo
  • SQL-如何选择具有最大值的列的行[重复]

    这个问题在这里已经有答案了 date value 18 5 2010 1 pm 40 18 5 2010 2 pm 20 18 5 2010 3 pm 60 18 5 2010 4 pm 30 18 5 2010 5 pm 60 18 5
  • Laravel 如何检查验证唯一表两个字段

    我有 tableA 有 2 个字段 1 song id 2 playlist id 我想检查 laravel 验证独特的功能 示例 我已插入数据 id gt 1 song id gt 2 playlist id gt 34 然后我必须再次插
  • 仅删除给定字符串中的第一个单词

    我正在尝试从给定字符串中删除第一个单词 到目前为止我已经完成了 word removeMe meow whatever needle removeMe haystack To replace with word str replace ne
  • 同一域中 IE9 中的 Script5 访问被拒绝

    我正在 django 中开发一个网站 它使用 jquery 多文件上传插件 当我注册到我的网站时 一封确认电子邮件会发送到我的 Gmail 帐户 我单击激活链接 我的网站将在新选项卡中打开 我登录 然后尝试上传文件 但在 IE9 中失败 F
  • Rcpp:错误:与请求的类型不兼容

    我有这个 C 代码 include
  • 独特的词典列表

    假设我有一个字典列表 id 1 name john age 34 id 1 name john age 34 id 2 name hanna age 30 如何获取唯一词典的列表 删除重复项 id 1 name john age 34 id
  • 源更改时如何重建 Node.js 插件

    我有一个 node js 应用程序 并且创建了一个本机插件 如果您需要背景信息 可以创建 Node js 的本机插件像这样 https nodejs org api addons html 在我的开发环境中 我希望它监视源文件 在本例中是