gpt4 book ai didi

javascript - 在编译和缩小时让 child_process.fork() 在 electron 中工作

转载 作者:行者123 更新时间:2023-12-03 12:26:19 25 4
gpt4 key购买 nike

所以基本上我正在构建一个 Electron 应用程序。我遇到了一个有趣的问题,几个小时以来我一直在努力解决这个问题。应用程序的一部分需要是一个相对于源目录的 forked 进程 (child_process.fork())。

像这样:

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

webpack 将源代码编译成一个文件/bundle(main.js 文件),并在 app.asar 中编译 electron-builder。

我遇到的问题是如何在相关目录中使用 child_process.fork() ,该目录在编译和缩小应用程序时需要来自 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 配置是相当简单的配置。它还不是一个复杂的应用程序。这是一个多 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 文件排除在包中之外,使用 electron-builder,通过在配置中使用 files 数组来保留目录结构.

最佳答案

我想通了。我使思考过程过于复杂。这种行为可以通过使用集群主/工作模式来实现,并且只使用 main.js 文件来协调当作为“子”(fork)产生时通过命令参数执行的逻辑。

关于javascript - 在编译和缩小时让 child_process.fork() 在 electron 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53121620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com