Как использовать forever-monitor с электронно-угловым проектом? - PullRequest
8 голосов
/ 05 апреля 2019

Я использую Angular 2 с Electron и хочу продолжать процесс в фоновом режиме для отображения уведомлений. Для этого я использую forever-monitor , он работает только в режиме разработки, но когда я упаковываю свое приложение, используя электронный упаковщик, он перестает работать. Мой код выглядит так:

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, которая будет запускать фоновый процесс при вызове из углового компонента. Код в уведомлении-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();

Ответы [ 2 ]

3 голосов
/ 08 апреля 2019

Я не думаю, что это хорошая идея, чтобы установить ваш скрипт в каталоге активов.Я бы предпочел, чтобы он был упакован как дополнительный ресурс.

следующий фрагмент позволит запустить процесс вашего узла

  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

0 голосов
/ 14 апреля 2019

Вот как это работает:

1 - Перемещено messages-process.js файл из папки ресурсов в основной каталог.

2 - Изменен путь к файлу в основном.js:

var child = new (forever.Monitor)(path.join(__dirname, 'notification-process.js')...

Без использования объединения не работает после упаковки приложения.

...