憨厚的熊猫 · 手把手教Electron+vue,打包vue ...· 2 周前 · |
寂寞的茶叶 · 王璇(电视剧《陆贞传奇》人物)_百度百科· 3 月前 · |
无聊的松鼠 · 喝自来水致癌?《人民日报》叫停使用微波炉?这 ...· 5 月前 · |
健壮的苦咖啡 · 哥伦布的窑洞动漫完整版 - 百度· 1 年前 · |
有腹肌的充值卡 · 华为手环7和小米手环7选哪个好?横评对比告诉 ...· 1 年前 · |
体贴的扁豆 · B端C端左右互搏,新能源车究竟该卖给谁?_36氪· 1 年前 · |
产生的问题: 我使用nodejs和electron开发应用,make后生成的exe可执行文件没有nodejs引入的模块涉及的功能。
左图是开发环境使用命令“npm start”正常运行的界面,右图是make后产生的exe文件运行界面。引入的模块是child_process(经测试,任何nodejs引入的模块都无法使用)。
开发环境:
开发使用的操作系统:windows 11企业版22H2
node版本:19.6.0
npm版本:9.4.1
electron版本:23.0.0
相关代码 如上图所示,我在electron项目中的preload.js文件中添加了子进程模块child_process,在make后并没有起作用。preload.js具体代码如下:
const { fork } = require('child_process')
const netcheck = fork('./netcheck.js')
window.addEventListener('DOMContentLoaded', () => {
const status = document.getElementById('status')
netcheck.on('message', (m)=>{
netcheck.send('check')
status.innerText = m.data
netcheck.send('check')
子进程文件netcheck.js的代码如下:
const dns = require('node:dns')
process.on('message',()=>{
setTimeout(getNetstatus,3000)
function getNetstatus(){
dns.lookup('cloud.tencent.com',(err)=>{
if (err){
msg = {code:0,data:"网络出错,请检查网络连接"}
process.send(msg)
}else{
msg = {code:1,data:"网络连接正常"}
process.send(msg)
前端html、javascript、css都正常,仅仅是nodejs部分没有起作用。
上面看到的“正在检测网络状态”的字样是预先在html里设定好的。
以下是入口程序main.js的代码:
// main.js
const { app, BrowserWindow} = require('electron')
const { join } = require('path')
const createWindow = () => {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegrationInWorker: true,
preload: join(__dirname, 'preload.js')
mainWindow.loadFile('index.html')
mainWindow.webContents.openDevTools()
app.whenReady().then(() => {
createWindow()
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
以下是index.html文件:
<!DOCTYPE html>
<meta charset="UTF-8">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>检测</title>
<link type="text/css" rel="stylesheet" href="resources/bootstrap-icons.css">
<link type="text/css" rel="stylesheet" href="resources/main.css">
</head>
<div id="brand">
<i class="bi bi-globe2"></i><div><span>好抓</span>网络抓取客户端</div>
</div>
<div id="status">正在检测网络状态</div>
<div id="list" class="list-normal"></div>
<script type="text/javascript" src="resources/require.js" data-main="resources/index.js"></script>
</body>
</html>
打包过程:
- 下载electron-forge并导入项目
npm install --save-dev @electron-forge/cli
npx electron-forge import
- 然后make
npm run make
0 提建议
微信扫一扫 点击复制链接 分享 - 邀请回答
- 编辑 收藏 删除
- 收藏 举报
追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金
¥ 15
(您已提供 ¥ 20, 还可追加 ¥
支付方式
扫码支付
加载中...
6
条回答
默认
最新
-
关注
码龄
粉丝数
原力等级 --
-
被采纳
-
被点赞
-
采纳率
GISer Liu
2023-02-15 14:56
关注
根据你提供的信息,我推测这是因为 'child_process应用使用了不同的运行时(Chromium 浏览器)。如果没有正确打包 Node.js 核心模块,这些模块就不能在 Electron 应用中运行。
为了正确地打包 Node.js 核心模块,你可以使用electron-forge的一些插件,例如
@electron-forge/plugin-webpack或@electron-forge/plugin-webpack-rc.这些插件可以在打包时将
Node.js 核心模块打包到 Electron 应用中。
以下是使用
@electron-forge/plugin-webpack的步骤:
1.安装
@electron-forge/plugin-webpack:
npm install --save-dev @electron-forge/plugin-webpack
2.在 '包文件中,添加以下配置:
"config": {
"forge": {
"packagerConfig": {},
"makers": [
"name": "@electron-forge/maker-squirrel",
"config": {
"name": "your-app-name"
"plugins": [
"@electron-forge/plugin-webpack",
"mainConfig": "./webpack.main.config.js",
"renderer": {
"config": "./webpack.renderer.config.js",
"entryPoints": [
"html": "./src/index.html",
"js": "./src/renderer.ts",
"name": "main_window"
3.在项目根目录下创建 'webpack.renderer.config.js
const path = require('path')
module.exports = {
target: 'electron-renderer',
entry: {
renderer: './src/renderer.ts'
resolve: {
extensions: ['.js', '.ts', '.jsx', '.tsx', '.json']
module: {
rules: [
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist')
4.修改 'preload.js中加载child_process模块的方式,改为使用require加载,如下所示:
window.child_process = require('child_process');
5.重新运行npm run make,等待打包完成。
如果你需要使用其他插件打包,可以参考它们的文档进行配置。
本回答被题主选为最佳回答
, 对您是否有帮助呢?
本回答被专家选为最佳回答
, 对您是否有帮助呢?
本回答被题主和专家选为最佳回答
, 对您是否有帮助呢?
微信扫一扫
点击复制链接
分享
举报
按下Enter换行,Ctrl+Enter发表内容
-
关注
码龄
粉丝数
原力等级 --
-
被采纳
-
被点赞
-
采纳率
普通网友
2023-02-15 14:10
关注
你会不会没有权限啊?
没有权限保存,或者没有权限写入
你检查下看看
本回答被题主选为最佳回答
, 对您是否有帮助呢?
本回答被专家选为最佳回答
, 对您是否有帮助呢?
本回答被题主和专家选为最佳回答
, 对您是否有帮助呢?
微信扫一扫
点击复制链接
分享
举报
按下Enter换行,Ctrl+Enter发表内容
-
关注
码龄
粉丝数
原力等级 --
-
被采纳
-
被点赞
-
采纳率
MarkHan_
2023-02-15 14:14
关注
这个问题可能是由于在打包时未将所需的模块打包到可执行文件中导致的。在 Electron 打包应用时,需要确保所有依赖的模块都被打包到可执行文件中,否则应用程序可能会出现运行时错误,如缺少模块的错误。
您可以尝试使用 Electron 打包工具中提供的命令行选项来打包所有依赖的模块。例如,使用 --asar 选项可以将应用程序和所有依赖的模块打包成一个 asar 文件,以便更好地管理和分发应用程序。
另外,您可能需要检查您的代码中是否存在引用本地文件的情况。在打包后,这些本地文件可能无法正确加载,从而导致应用程序无法正常工作。在这种情况下,您可以使用 Node.js 的内置模块 path 来动态获取文件的路径,而不是使用硬编码的本地路径。
最后,您可以尝试在开发模式下使用 Electron 运行应用程序,并查看是否存在任何错误或警告信息。
本回答被题主选为最佳回答
, 对您是否有帮助呢?
本回答被专家选为最佳回答
, 对您是否有帮助呢?
本回答被题主和专家选为最佳回答
, 对您是否有帮助呢?
微信扫一扫
点击复制链接
分享
举报
按下Enter换行,Ctrl+Enter发表内容
-
关注
码龄
粉丝数
原力等级 --
-
被采纳
-
被点赞
-
采纳率
关注
-
关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:
electron-builder打包exe以及可能出现的问题
本回答被题主选为最佳回答
, 对您是否有帮助呢?
本回答被专家选为最佳回答
, 对您是否有帮助呢?
本回答被题主和专家选为最佳回答
, 对您是否有帮助呢?
微信扫一扫
点击复制链接
分享
举报
按下Enter换行,Ctrl+Enter发表内容
-
关注
码龄
粉丝数
原力等级 --
-
被采纳
-
被点赞
-
采纳率
Jackyin0720
2023-02-15 18:05
关注
本回答被题主选为最佳回答
, 对您是否有帮助呢?
本回答被专家选为最佳回答
, 对您是否有帮助呢?
本回答被题主和专家选为最佳回答
, 对您是否有帮助呢?
微信扫一扫
点击复制链接
分享
举报
按下Enter换行,Ctrl+Enter发表内容
-
关注
码龄
粉丝数
原力等级 --
-
被采纳
-
被点赞
-
采纳率
喊你敲代码
2023-02-16 06:41
关注
看看在打包应用程序时是否包含了子进程模块,可以尝试在electron-forge的构建配置文件中添加asarUnpack选项,以便在构建过程中将模块解压到应用程序包中。
本回答被题主选为最佳回答
, 对您是否有帮助呢?
本回答被专家选为最佳回答
, 对您是否有帮助呢?
本回答被题主和专家选为最佳回答
, 对您是否有帮助呢?
微信扫一扫
点击复制链接
分享
举报
按下Enter换行,Ctrl+Enter发表内容
查看更多回答(5条)
报告相同问题?
-
-
-
-
高自期许的博客
Electron
简介、安装、快速入门
-
-
-
-
西京刀客的博客
文章目录使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序-
electron
使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序-
electron
-
-
-
-
www.bajins.com的博客
面向对象编程 常用 JDK(Java development kit) java开发工具包 常用 JVM(java virtual machine) 虚拟机 常用 classpath 类路径 常用 Version 版本 常用 author 作者 常用 java 解释命令 常用 ...
-
-
削微寒的博客
本月刊是每月 28 号更新,再见月刊就是年后了。在这里提前祝大家:新年快乐! 下面便是第 58 期的内容啦,希望大家喜欢 以下为本期内容|每个月 28 号发布最新一期|点击查看往期内容 C# 项目 1、...
-
2021-06-25 16:38
wanzheng_96的博客
环境: node: v14.16.0 npm: 6.14.11 ...编译
打包
: npm run
make
在现有项目中使用 将现有的
Electron
项目导入
ELectron
Forge 工作流非常直接: cd my-app npm install --save-dev @
electron
-forg
-
没有解决我的问题,
去提问
问题事件
悬赏问题
-
¥20
如何用Numpy库的向量化方法提高delta对冲的计算效率?(代码已附,只需修改第三个函数,在一小时内绘制出散点图即可)
yolov5双目识别输出坐标代码报错
这个代码有什么语法错误
给予STM32按键中断与串口通信
使用QT实现can通信
关于sp验证的一些东西,求告知如何解决,
关于#javascript#的问题:但是我写的只能接码数字和字符,帮我写一个解码JS问题
prophet运行报错,如何解决?
寂寞的茶叶 · 王璇(电视剧《陆贞传奇》人物)_百度百科 3 月前 |
健壮的苦咖啡 · 哥伦布的窑洞动漫完整版 - 百度 1 年前 |
体贴的扁豆 · B端C端左右互搏,新能源车究竟该卖给谁?_36氪 1 年前 |