По сути, я создаю электронное приложение. Я столкнулся с интересной проблемой, которую пытаюсь решить уже несколько часов. Это часть приложения, которая должна быть разветвленным процессом (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 в конфигурации.