关于 Electron 有个想法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tozp
1.02D
V2EX    Electron

关于 Electron 有个想法

  •  
  •   tozp 2022-03-22 09:09:21 +08:00 via iPhone 8793 次点击
    这是一个创建于 1300 天前的主题,其中的信息可能已经有所发展或是发生改变。
    能不能开发个类似 bridge 的适配包,装上那个之后只要电脑上有 chrome 浏览器,所有 electron 应用就不必要每个都自带一整套 chrome 代码,以后应用程序的 size 会非常小?.net 框架貌似就是这样,只要电脑上装了运行时环境,应用程序不复杂的话只有几十几百 k 就能实现很多完整的功能。我没做过 electron ,所以以上也许是个可行的想法,欢迎交流。
    第 1 条附言    2022-03-22 11:35:24 +08:00
    感谢所有 v 友的评论,让我学到不少东西。
    48 条回复    2022-04-18 19:07:41 +08:00
    dragonszy
        1
    dragonszy  
       2022-03-22 09:17:06 +08:00
    https://github.com/sudhakar3697/electron-alternatives
    每种语言类似的有很多,比如 Rust 的 Tauri
    villivateur
        2
    villivateur  
       2022-03-22 09:17:21 +08:00 via Android
    那么问题来了,有的应用只支持 Chrome 98 ,但你升级到了 99 ,就会导致这个应用不能用
    thetbw
        3
    thetbw  
       2022-03-22 09:17:51 +08:00
    win11 自带了 edge 的
    C603H6r18Q1mSP9N
        4
    C603H6r18Q1mSP9N  
       2022-03-22 09:18:58 +08:00
    Rust 的 Tauri ,研究过 自带 FF
    ysc3839
        5
    ysc3839  
       2022-03-22 09:21:41 +08:00 via Android
    不能直接调用 Chrome ,但有类似方案,可以调用系统提供的 WebView 。不过主要问题是不同系统的 WebView 提供的接口以及支持的特性不一致,可能会受到许多限制。
    Kimen
        6
    Kimen  
       2022-03-22 09:22:54 +08:00
    类似的我也有一个疑问,为什么每个 node 前端项目都有一个独立的 node_modules 文件夹,为什么不能像 maven 一样将相同的依赖包放在一起只留一份
    BingoXuan
        7
    BingoXuan  
       2022-03-22 09:33:30 +08:00
    最好的例子就是 pywebview ,但很蛋痛的一点就是,只能拦截 js 不能拦截请求。也就是注定要启动一个服务器来处理静态资源。
    VirgilMing
        8
    VirgilMing  
       2022-03-22 09:33:48 +08:00 via iPhone
    @Kimen 那又很容易就回到依地了
    但其白了是年硬存都不是很
    ChefIsAwesome
        9
    ChefIsAwesome  
       2022-03-22 09:34:14 +08:00
    这问题 electron 做出来就有人讨论过了。它不只是自带 chrome ,还自带了一个 node 环境。问题就是版本一变,软件直接就可能不能用了。现在的做法也是取舍的结果。
    shakaraka
        10
    shakaraka  
    PRO
       2022-03-22 09:34:32 +08:00
    好。你重走了 ie 的模式
    murmur
        11
    murmur  
       2022-03-22 09:41:35 +08:00
    为啥不用 edge
    DTCPSS
        12
    DTCPSS  
       2022-03-22 09:42:13 +08:00
    Tauri 这类框架感觉如果要做一些超出浏览器范围的事比较麻烦,比如在 Rust 里处理个本地大文件什么的。
    pkwenda
        13
    pkwenda  
       2022-03-22 09:51:19 +08:00
    @DTCPSS #12 是的,写多 demo ,比如 sqlite 必须用 tauri 提供的,还依赖本地浏览器,升级 mac 系统 dev tools 崩溃等等问题

    https://github.com/pkwenda/tauri-vue3-vuetify3-template
    maichael
        14
    maichael  
       2022-03-22 09:52:17 +08:00
    这玩意不是技术实现的问题,而是生态的问题,涉及到应用、浏览器、系统等生态,Electron 压根没有这个能力整合,不是没有过这种想法,而是压根推不起来。
    zhaozhao
        15
    zhaozhao  
       2022-03-22 09:54:28 +08:00   1
    @Kimen pnpm 就是这么做的
    yolee599
        16
    yolee599  
       2022-03-22 10:01:08 +08:00
    都用 Electron 了还考虑那么多干嘛?如果考虑资源问题,就不会使用 Electron ,大把其他方案
    0o0o0o0
        17
    0o0o0o0  
       2022-03-22 10:03:25 +08:00
    参考 webview2
    binux
        18
    binux  
       2022-03-22 10:04:59 +08:00 via Android
    Tink
        19
    Tink  
    PRO
       2022-03-22 1006:05 +08:00
    主要是版本,如果版本兼容能解决的话肯定都会这么做
    otakustay
        20
    otakustay  
       2022-03-22 10:24:27 +08:00
    我用 Electron 就可以毫无顾虑地使用 Webkit 和 V8 最新特性,如果只用客户端有的 Chrome ,又要回到 Web 这样到处考虑兼容性时代了
    sutaking
        21
    sutaking  
       2022-03-22 10:39:17 +08:00
    题主的思路 Google 已经采纳了,2018 年开发者大会就弄了个 pwa 出来
    我还为此在知乎上做过一回标题党,哈哈,[一首凉凉送给 Electron( https://zhuanlan.zhihu.com/p/40648909)
    3dwelcome
        22
    3dwelcome  
       2022-03-22 10:39:48 +08:00
    @yolee599 哪有什么其他方案。

    目前对 JS 支持最好的,版本更新最勤快的,也只有 electron 了。
    DTCPSS
        23
    DTCPSS  
       2022-03-22 10:40:52 +08:00
    之前试着用 .NET 的 Photino (类似 Tauri 的跨平台本地 web app 框架)给一个用 Mac 的同事做了个工具(我用 Windows ),结果为了在 C# 侧获取一个用户选择的本地大文件不得不起了个服务器…
    fregie
        24
    fregie  
       2022-03-22 10:53:16 +08:00
    微软已经在 windows 上出了 webview2 ,大概就是这个意思,把 chrome 内核掏出来做了 runtime 装在系统里
    我记得 teams 就要基于这个来做
    aptupdate
        25
    aptupdate  
       2022-03-22 11:01:14 +08:00
    Electron 开发者又何尝不希望这样呢,只是迫不得已。
    Kimen
        26
    Kimen  
       2022-03-22 11:12:49 +08:00
    @zhaozhao #15 感谢,学习了
    Arguments
        27
    Arguments  
       2022-03-22 11:13:40 +08:00 via iPhone
    @Kimen 可以试试 pnpm
    lqzhgood
        28
    lqzhgood  
       2022-03-22 11:15:46 +08:00
    说回来现在硬盘内存又不贵~
    vevy
        29
    vevy  
       2022-03-22 11:17:57 +08:00
    这不就是 pwa 吗
    cweijan
        30
    cweijan  
       2022-03-22 11:26:03 +08:00
    @sutaking pwa 有限制的, google 限制你啥你就只能用啥
    pengtdyd
        31
    pengtdyd  
       2022-03-22 13:23:04 +08:00
    现在的软件开发越来越不需要考虑包的大小了,因为现在的电脑也好手机也会容量够大,现在开发要考虑的是如何快速实现业务而不是考虑性能
    hazardous
        32
    hazardous  
       2022-03-22 13:44:13 +08:00
    直接写个 localhost 的本地服务就行了,nodejs 开撸。
    icyalala
        33
    icyalala  
       2022-03-22 13:52:56 +08:00
    kennir
        34
    kennir  
       2022-03-22 14:14:08 +08:00
    现在的设备 100 多 M 根本不是事啊,相对于去引用其他的模块(还是最核心的模块)带来的麻烦,肯定是现在这种方式更好

    不过我很讨厌 electron 的应用....和 os 之间的联系太弱了,在 macOS 上的分享,shortcuts 很难打通
    ruxuan1306
        35
    ruxuan1306  
       2022-03-22 14:48:25 +08:00
    自带全套依赖对运行环境没假设,就像直接拉容器镜像用起来方便,不然配个环境就得小半天。
    learningman
        36
    learningman  
       2022-03-22 14:51:33 +08:00
    @Kimen #6 pnpm 就是这么干的,全局维护唯一存储,剩下的用 hardlink 解决
    jfdnet
        37
    jfdnet  
       2022-03-22 16:02:38 +08:00
    其实不能跟 java 一样,出个 runtime 么?
    zhangneww
        38
    zhangneww  
       2022-03-22 16:21:49 +08:00
    如果 chrome 插件 API 扩展一下呢?每个 Electron 都变成一个浏览器插件岂不是更小?
    Rrrrrr
        39
    Rrrrrr  
       2022-03-22 16:22:06 +08:00
    @jfdnet eletron 就是把 runtime 打包一起了啊
    ziseyinzi
        40
    ziseyinzi  
       2022-03-22 16:28:36 +08:00
    electron 为什么不能共享也算是 V2 月经贴了
    Huelse
        41
    Huelse  
       2022-03-22 16:46:38 +08:00
    之前就遇到个应用调用的系统的 Chromium 内核和 Gecko 内核

    https://docs.shuax.com/MouseInc/#/
    Asyncway
        42
    Asyncway  
       2022-03-22 19:10:48 +08:00
    rust 有类似的东西
    jfdnet
        43
    jfdnet  
       2022-03-22 19:21:42 +08:00
    @Rrrrrr 所以不要打包在一起啊,出个 runtime 让有需要的用户可以单独安装,就不用每个项目都那么大文件了。所以说像 java 的方式为什么不可行?
    robinlovemaggie
        44
    robinlovemaggie  
       2022-03-22 19:42:56 +08:00
    @zhaozhao #15 pnpm does not work with electron
    lmoon
        45
    lmoon  
       2022-03-22 19:52:29 +08:00 via Android
    @robinlovemaggie 可以一起用啊,你自己没配好吧
    robinlovemaggie
        46
    robinlovemaggie  
       2022-03-22 20:08:26 +08:00
    dcsuibian
        47
    dcsuibian  
       2022-03-22 20:37:42 +08:00
    @Kimen 之前看到过一个评论:语言本身缺陷,node 基础库设计缺陷,早期社区核心开发者技术能力缺陷 => 大量语言扩展包泛滥 => 核心包依赖爆炸 => 版本问题,安全问题,性能问题 => 各种稀奇古怪的解决方案 => 更多问题

    我个人比较同意。Java 自带 package 这种模块化机制,自然而然地影响了 Maven 。
    而 js 一开始都不自带模块化语法,搞出来一堆 AMD 、CMD 、UMD 、IIFE 、CommonJS 这种,又追求简单。
    ychost
        48
    ychost  
       2022-04-18 19:07:41 +08:00
    大部分情况 PWA 就够了吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3063 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 00:19 PVG 08:19 LAX 17:19 JFK 20:19
    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