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