所以基本上我正在构建一个电子应用程序。我遇到了一个有趣的问题,我已经尝试解决了几个小时。应用程序的一部分需要是一个与源目录相关的 fork 进程(child_process.fork())。
赞:
- app
- main-process
- core
- manager
- index.js
- fork.js
- some-module.js
- main.js
webpack将源代码编译为一个文件/捆绑包(main.js文件),并在 app.asar 中将electron-builder编译为一个文件。
我遇到的问题是如何在相对目录中使用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()
需要一个文件,因此这是行不通的。
webpack配置相当严格。它不是一个复杂的应用程序。这是一个多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(),
]
};
我已经弄清楚了,使用webpack可以将这个fork.js文件排除在捆绑包之外,而对于Electro-builder,可以通过在配置中使用 files 数组来保留目录构造函数
答案 0 :(得分:0)
我知道了。我使思考过程变得过于复杂。可以通过使用集群主/工作者模式并仅使用main.js文件来协调以“子”(fork)生成时通过命令参数执行什么逻辑的行为。