被迫写了个 Electron 模板 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
mioktiar56
V2EX    程序员

被迫写了个 Electron 模板

  •  1
     
  •   mioktiar56 2024-03-28 11:19:51 +08:00 3861 次点击
    这是一个创建于 561 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先吐槽一下吧: 我本来是做 C++客户端开发的,公司之前一直是用的 Qt/Duilib+CEF 的模式开发客户端,一直平安无事,可能过于无事了吧,最近的一个产品想着用一些现在热门的 Electron ,一方面和前沿技术对接,另一方面也可以让前端来分担一部分客户端的开发工作,比如本地配置、文件下载这些。

    但实际开发中才发现公司的前端开发对客户端和系统方面的知识实在是太匮乏了,比如不知道什么是任务栏和系统托盘、文件路径和目录也分不清,主进程各种 js 异常满天飞,客户端咔咔崩溃......Electron 和 vue 结合也是一堆的坑。但既然已经选择了这个方案,也不能中途换方案,没办法,我只能硬着头皮学 Electron 和 vue 了,让前端专注写 Vue 页面部分,我写 Node.js 和 Electron 部分,项目总算坎坷的上线了,寄希望于后面慢慢重构吧。

    基于上面的教训,在项目开发完之后,我写了个 Electron 模板,争取后面的项目直接基于这个模板能够让前端平稳的参与进来,尽量抹平 web 开发和客户端开发之间的差异吧。

    大家可以看看我的模板,多提意见,谢谢

    https://github.com/winsoft666/electron-vue3-boilerplate

    第 1 条附言    2024-04-02 14:04:23 +08:00
    哈哈,原来大家对“产品”二字很在意,看来都遇到过 sb 产品,没办法程序员总是身不由己
    30 条回复    2024-04-02 16:19:55 +08:00
    wangtian2020
        1
    wangtian2020  
       2024-03-28 14:04:47 +08:00
    webPreferences: {
    nodeIntegration: true,
    contextIsolation: false,
    webSecurity: false,
    }
    ipc 通信脱裤子放屁,直接在渲染进程写 node 代码
    dx123
        2
    dx123  
       2024-03-28 14:10:06 +08:00
    emmm ,虽然不懂,但还是想问,为啥产品能决定技术栈或者说产品关心技术栈实现
    mioktiar56
        3
    mioktiar56  
    OP
       2024-03-28 14:10:59 +08:00
    @wangtian2020 只能说你是懂一点的,但懂的不多
    irisShaw
        4
    irisShaw  
       2024-03-28 14:14:34 +08:00   1
    最怕这种懂一点,懂得不多的,但能拍板做决定的人。。。
    Orangeee
        5
    Orangeee  
       2024-03-28 14:27:14 +08:00
    @dx123 估计是技术栈实现可以影响参与人数和交付时间,产品:“你用 Electron 不就前端也能一起开发了吗,可以提前 2 周上线了吧”
    DesnLee
        6
    DesnLee  
       2024-03-28 14:39:43 +08:00
    我是用 vite react electron

    这玩意包是真大,有点烦
    zjsxwc
        7
    zjsxwc  
       2024-03-28 14:41:31 +08:00
    不喜欢 ts ,喜欢 js
    不喜欢 vue 虚拟 dom ,喜欢 svelte 原生 dom
    ljsh093
        8
    ljsh093  
       2024-03-28 14:48:07 +08:00
    @wangtian2020 #1 哥,这么搞页面不卡吗
    ljsh093
        9
    ljsh093  
       2024-03-28 14:48:33 +08:00
    感谢分享,我直接一个 fork
    afxcn
        10
    afxcn  
       2024-03-28 14:51:38 +08:00
    用什么技术不是关键,人才是关键。

    精通 Electron 的人,用 Electron 会很爽;如果不熟悉 Electron 非要用,那就爽不了。
    wjx0912
        11
    wjx0912  
       2024-03-28 15:40:10 +08:00
    支持 ts 。现在团队用的 jsdoc 非常痛苦。撸外快用的 ts 就省事多了。
    通信的话,要么不封装,要么更进一步?( service ,controller )
    要是想做个开箱即用的,可以考虑加入 pinia, elementplus, i18n 啥的?
    BlackHole1
        12
    BlackHole1  
    PRO
       2024-03-28 15:45:24 +08:00
    已 Star 。支持 NSIS 很 Nice ,有兴趣给 Electron Forge 提交支持 NSIS 的 feat PR 么?
    asdhak
        13
    asdhak  
       2024-03-28 16:05:43 +08:00
    someios
        14
    someios  
       2024-03-28 16:14:59 +08:00
    我们甲方不让用 nodeIntegration: true ,网络请求都放在 nodejs 来处理的
    wangtian2020
        15
    wangtian2020  
       2024-03-28 17:14:36 +08:00
    @ljsh093 我用的全是 promise 的接口一个同步 nodejs api 的都不用 ,为什么会觉得卡。觉得卡就是写代码的人技术水平不行
    ljsh093
        16
    ljsh093  
       2024-03-28 17:59:35 +08:00
    @wangtian2020 #15 除非起 worker 不然都是单线程,会影响渲染性能
    wangtian2020
        17
    wangtian2020  
       2024-03-28 18:11:19 +08:00
    @ljsh093 Javascript 单线程异步的含义就是有回调就干活,没活就该渲染渲染。不会影响性能,只有用同步的 nodejs api 才会卡住
    我只用```import fs from 'fs'
    fs.promises.下的异步 API```凭什么卡。
    不懂不会写别瞎说
    duan602728596
        18
    duan602728596  
       2024-03-28 18:53:53 +08:00
    我也是直接在渲染进程写 node 代码。
    node require 在渲染进程会影响 page 的初始化,我靠自己写的 babel 插件来解决的这个问题。
    Jirajine
        19
    Jirajine  
       2024-03-28 19:24:46 +08:00
    直接 nodeintegration 没毛病,想想用 electron 是为了什么。
    NormanGhost
        20
    NormanGhost  
       2024-03-28 19:44:28 +08:00 via Android
    我们公司也是 electron 技术栈,来公司一年后我一个前端也能用 c++写 node addon 集成算法同事的静态,动态库了。写 electron 最起码要有 node 基础,懂后端 客户端基础知识的。不能只懂前端
    jianchang512
        21
    jianchang512  
       2024-03-28 20:51:00 +08:00 via Android
    Electron-Egg.
    不考虑这个吗,感觉用起来更简单
    DSKcpp
        22
    DSKcpp  
       2024-03-28 22:02:24 +08:00
    @ljsh093 我的项目几乎每个操作都有 IO 操作 ,卡是不可能卡的,fs/promises + async await
    flyqie
        23
    flyqie  
       2024-03-28 22:15:55 +08:00
    @wangtian2020 #1

    没记错的话,ipc 是方便解耦吧。。

    有些项目分离开用 ipc 还是挺方便的。
    linuxsteam
        24
    linuxsteam  
       2024-03-29 07:21:49 +08:00 via iPhone
    写 qt 的写这玩意太简单了
    mioktiar56
        25
    mioktiar56  
    OP
       2024-03-29 10:05:24 +08:00
    @asdhak 这个项目我看了,有点用前端是思维在做客户端,比如它用的 vue 单页面,客户端通常是多窗口的,这种会导致每个客户端窗口不独立,窗口会加载一些不必要的东西。
    只是我的一点看法
    mioktiar56
        26
    mioktiar56  
    OP
       2024-03-29 10:08:02 +08:00
    @DesnLee 我试过最新版的 Electron ,可以打包压缩到 55M 左右。如果太大了,你看看是不是 node_modules 里面有太多非主进程需要的东西。理论上 vue 前端项目 build 之后,node_modules 里面的依赖都不需要了
    horizon
        27
    horizon  
       2024-03-29 13:41:03 +08:00
    @dx123 #2
    这里的产品我觉得是指真正意义上的产品,而不是产品经理?
    mioktiar56
        28
    mioktiar56  
    OP
       2024-04-02 14:04:58 +08:00
    @horizon 产品经理要求这个产品用 xx 技术
    horizon
        29
    horizon  
       2024-04-02 15:57:32 +08:00
    @mioktiar56 #28
    那你这有点离谱了
    mioktiar56
        30
    mioktiar56  
    OP
       2024-04-02 16:19:55 +08:00
    @horizon 产品说他大学是学的计算机,和老板一顿吹,于是.......
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3611 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 10:23 PVG 18:23 LAX 03:23 JFK 06:23
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86