如何在 Electron-Angular 项目中使用 forever-monitor?
How to use forever-monitor with Electron-Angular project?
我正在将 Angular 2 与 Electron 一起使用,并希望在后台保留一个进程以显示通知。我为此使用 forever-monitor,它只在开发模式下工作,但是当我使用 electron-packager 打包我的应用程序时,它停止工作。我的代码看起来像这样:
main.ts
exports.runBackgroundProcess = () => {
// Run a background process forever
var forever = require('forever-monitor');
var child = new(forever.Monitor)('src/assets/notification-process.js',
{
env: {ELECTRON_RUN_AS_NODE: 1},
options: []
});
child.start();
}
我在 main.ts 中编写了一个函数,当从 angular 组件调用时,该函数将 运行 后台处理。通知中的代码-process.js 如下:
通知-process.js
notifier = require('node-notifier')
notifierFun = (msg) => {
notifier.notify({
title: 'Notify Me',
message: msg,
wait: true
});
}
var CronJob = require('cron').CronJob;
new CronJob('* * * * * *', function() {
notifierFun("Message from notification process");
});
最后我从 app.component.ts
调用函数
let main_js = this.electronService.remote.require("./main.js");
main_js.runBackgroundProcess();
我认为将脚本设置在资产目录中不是一个好主意。
我希望将其打包为额外资源。
下一个片段将允许启动您的节点进程
var child_process = require('child_process');
var child = child_process.fork('notification-process.js',[],{
cwd : 'resources'
});
如果打包后还不行,可能是因为你的文件没有打包,打包成额外资源,修改package.json如下:
这会将 webserver 文件夹打包到 resources/webserver 文件夹:
"target": [
"win": {
"target": "nsis",
"icon": "build/icon.ico",
"extraResources" : [{
"from" : "webserver",
"to" : "webserver"}
]
},
供参考,请查看:
https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
这就是它的工作原理:
1- 将 notification-process.js 文件从 assets 文件夹移动到主目录。
2- 在 main.js 中更改了文件路径:
var child = new (forever.Monitor)(path.join(__dirname, 'notification-process.js')...
不使用join,打包应用后不起作用。
我正在将 Angular 2 与 Electron 一起使用,并希望在后台保留一个进程以显示通知。我为此使用 forever-monitor,它只在开发模式下工作,但是当我使用 electron-packager 打包我的应用程序时,它停止工作。我的代码看起来像这样:
main.ts
exports.runBackgroundProcess = () => {
// Run a background process forever
var forever = require('forever-monitor');
var child = new(forever.Monitor)('src/assets/notification-process.js',
{
env: {ELECTRON_RUN_AS_NODE: 1},
options: []
});
child.start();
}
我在 main.ts 中编写了一个函数,当从 angular 组件调用时,该函数将 运行 后台处理。通知中的代码-process.js 如下:
通知-process.js
notifier = require('node-notifier')
notifierFun = (msg) => {
notifier.notify({
title: 'Notify Me',
message: msg,
wait: true
});
}
var CronJob = require('cron').CronJob;
new CronJob('* * * * * *', function() {
notifierFun("Message from notification process");
});
最后我从 app.component.ts
调用函数let main_js = this.electronService.remote.require("./main.js");
main_js.runBackgroundProcess();
我认为将脚本设置在资产目录中不是一个好主意。 我希望将其打包为额外资源。
下一个片段将允许启动您的节点进程
var child_process = require('child_process');
var child = child_process.fork('notification-process.js',[],{
cwd : 'resources'
});
如果打包后还不行,可能是因为你的文件没有打包,打包成额外资源,修改package.json如下: 这会将 webserver 文件夹打包到 resources/webserver 文件夹:
"target": [
"win": {
"target": "nsis",
"icon": "build/icon.ico",
"extraResources" : [{
"from" : "webserver",
"to" : "webserver"}
]
},
供参考,请查看: https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
这就是它的工作原理:
1- 将 notification-process.js 文件从 assets 文件夹移动到主目录。
2- 在 main.js 中更改了文件路径:
var child = new (forever.Monitor)(path.join(__dirname, 'notification-process.js')...
不使用join,打包应用后不起作用。