#node.js #angular #electron #node-modules #forever-monitor
#node.js #angular #electron #узлы-модули #forever-monitor
Вопрос:
Я использую 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. Код в notification-process.js следует:
notification-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();
Ответ №1:
Я не думаю, что устанавливать ваш скрипт в каталоге assets — хорошая идея. Я бы предпочел, чтобы он был упакован как дополнительный ресурс.
следующий фрагмент позволит запустить процесс вашего узла
var child_process = require('child_process');
var child = child_process.fork('notification-process.js',[],{
cwd : 'resources'
});
Если он не работает после упаковки, это может быть связано с тем, что ваши файлы не были упакованы.Чтобы упаковать его в качестве дополнительного ресурса, измените package.json следующим образом:
это упакует папку веб-сервера в папку 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
Ответ №2:
Вот как это работало:
1- Перемещен notification-process.js файл из папки assets в основной каталог.
2- Изменен путь к файлу в main.js:
var child = new (forever.Monitor)(path.join(__dirname, 'notification-process.js')...
Без использования join это не работает после упаковки приложения.