Получение child_process.fork () для работы в электронном режиме при компиляции и минимизации - PullRequest
0 голосов
/ 02 ноября 2018

Так что в основном я создаю электронное приложение. У меня возникла интересная проблема, которую я пытался выяснить уже несколько часов. Существует часть приложения, которая должна быть разветвленным процессом (child_process.fork ()), который относится к исходному каталогу.

Как это:

- app
  - main-process
    - core
      - manager
       - index.js 
       - fork.js
       - some-module.js
  - main.js

Веб-пакет компилирует исходный код в один файл / пакет (файл main.js) вместе с компоновщиком электронов, компилируемым в app.asar .

Проблема, с которой я столкнулся, заключается в том, как использовать child_process.fork () в относительном каталоге, для которого требуются модули от разветвленного процесса, когда приложение компилируется и минимизируется. Те необходимые модули, которые при компиляции теперь находятся в файле main.js, минифицированы, таким образом, ссылка теряется в файле fork.js, что делает «некоторый модуль» не найденным.

// app/main-process/core/manager/index.js
const child_process = require('child_process');


let child = child_process.fork('./fork.js');
child.send('start');



// app/main-process/core/manager/fork.js
const someModule = require('./some-module');
someModule(()=>{
  ...
})

При компиляции webpack автоматически разрешает эти требуемые пути в ссылках в комплекте, но, поскольку child_process.fork() требует файл, будет иметь смысл, что это не будет работать.

Конфигурация webpack является довольно простой конфигурацией. Это не сложное приложение еще. Это конфигурация с несколькими веб-пакетами, но я просто показываю конфигурацию основного процесса.

const backend = {
  entry:path.resolve(__dirname, '../app/main.js'),
  devtool:false,
  target:'node',
  output: {
    filename: 'main-compiled.js',
    sourceMapFilename: 'main-compiled.js.map',
  },
  node:{
    fs:'empty',
    http:'empty',
    crypto:'empty',
    electorn:'empty',
    __dirname:true,
    __filename:true,
  },
  module:{
    loaders:[
      {
        test:/\.json$/,
        use:[
          {loader:'json-loader'},
        ]
      }
    ]
  },
  plugins:[
    new webpack.optimize.UglifyJsPlugin({
      sourceMap:true,
      parallel: true,
      compress:{
        warnings:false,
        drop_console:true
      }
    })
  ],
  externals:[
    nodeExternals(),
  ]
};

Я уже понял, что с помощью веб-пакета я могу исключить этот файл fork.js из включения в пакет и с помощью электронного компоновщика, сохранить конструктор каталогов, используя массив files в конфигурации.

1 Ответ

0 голосов
/ 06 ноября 2018

Я понял это. Я был слишком сложным мыслительным процессом. Такое поведение может быть достигнуто с помощью шаблона master / worker кластера и просто с помощью файла main.js, чтобы координировать, какая логика выполняется через аргументы команды, когда порождается как «child» (fork).

...