Получение child_process.fork () для работы в электронном виде при компиляции и минификации

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

Нравится:

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

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

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

// 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() требуется файл, было бы логично, что это не сработает.

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

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(),
  ]
};

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


person echopeak    schedule 02.11.2018    source источник


Ответы (1)


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

person echopeak    schedule 06.11.2018