在node-red项目中有个自动重启流程的需求。用户不想手动点击重启流程,希望半小时自动调服务,以保证数据连接稳定,如图
开始:
拿到项目之后挺无奈的,工程解构很简洁,无从下手
入口red.js文件,从package.json入手
进入node包中,发现略微有些复杂,工程依赖中引用别的依赖
定位到red.js中时,从页面定位到重启流程的id节点,debugger等等一系列定位,最终在初始化中写下定时器,随后重启服务,发现根本不生效,随后一波问候chatgpt,如何更改node_module中依赖包,发现使用‘patch-package’这个工具可以对包进行补丁操作,
下载 patch-package
npm install patch-package --save-dev
然后在工程目录中添加到脚本命令
"scripts": {
"postinstall": "patch-package"
}
随后对修改的文件生成补丁,我这边是单个文件,也可以批量
npx patch-package <package-name>
npx patch-package @node-red/editor-client (因为用的压缩包,所以等压缩完之后再用这步生成补丁,如果node_module不是用的压缩包则直接执行这步,忽略后续)
我这边直接对包依赖进行补丁,(注意,包中依赖无法用public/xxx.js文件进行补丁,需要对子依赖中的依赖包进行补丁)
随后,发现这个文件用min.js压缩形式生效,我们将修改的js文件再压缩即可。
这里我们使用uglifyjs 工具,
全局安装工具
npm install uglify-js -g
随后将目标文件压缩为min文件即可
uglifyjs xxx.js -o xxx.min.js
写了个2s自动调用看看效果,大功告成