V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
abcbuzhiming

Web 前端项目如何和 Electron 项目共享代码?

  •  
  •   abcbuzhiming · Jul 25, 2024 · 2031 views
    This topic created in 652 days ago, the information mentioned may be changed or developed.
    已有基于 Web 的客户端项目正在运行。是功能比较复杂的 UI 类型程序,而不是一般的那种偏展示的 web 页面。

    现在老板要求必须打包一个客户端出来,说浏览器逼格不够,要 App 才好让他出去宣(骗)传(投资),使用体验和 web 完全相同,那只能用 Electron 了。

    但是这个 UI 程序确实写的比较复杂,页面,布局,交互的代码都挺多的。当然它没有什么原生 api 负担,因为基本都是在和后台服务器交互,不需要依赖本地操作系统 API 。
    我看了一下 Electron 的开发流程,我感觉这东西的脚手架和 Web 端还是有那么点不一样。我原本想的好事是一份代码,想打包成 web 端可以,想打包成 Electron 也可以。但是实际上似乎没法这么干。能查到的办法都是必须建立 Electron 的脚手架,然后把 web 那些的代码拷一份过来,然后再调整调整。

    我现在的主要担心是,如果复制成两份代码,很可能后面迭代几个版本就走样了,毕竟这程序功能挺多挺杂的,web 端和 Electron 端程序的功能很直接就分裂了。并且很不好弥合。

    有没有什么办法,能让它们共享代码呢?
    10 replies    2024-07-26 11:51:10 +08:00
    renmu
        1
    renmu  
       Jul 25, 2024 via Android
    完全不用,你打包完,electron 加载一下 html 就可以了
    abcbuzhiming
        2
    abcbuzhiming  
    OP
       Jul 25, 2024
    @renmu 不太理解这是什么操作,electron 可以从本地加载打包后的 web 项目的静态资源吗?还是说你的意思是直接从远程服务器加载?把 electron 直接当浏览器用?
    ZeoKarl
        3
    ZeoKarl  
       Jul 25, 2024
    electron 单独抽一个工程出来,然后就在上面放个 webview 之类的,加载一下在线的页面.完事以后基本上不用改,反正所有的逻辑都是页面内部的.
    renmu
        4
    renmu  
       Jul 25, 2024 via Android
    @abcbuzhiming 可以啊,如果这都不想做,那就直接加载线上页面,不需要额外适配
    maichael
        5
    maichael  
       Jul 25, 2024
    虽然已经 archived ,https://github.com/nativefier/nativefier 应该能满足你的需求
    不过也可以简单通过 mainWindow.loadURL 之类的方式来实现这个需求,Electron 本质上是个浏览器 + Node.JS runtime ,所以是可以加载 url 的。
    hengcheng
        6
    hengcheng  
       Jul 25, 2024
    aaniao002
        7
    aaniao002  
       Jul 25, 2024 via Android
    chrome -app 模式怎么样? 打包一下 chrome 写个启动就行。
    LongMaoz
        8
    LongMaoz  
       Jul 25, 2024
    没有客户端 API 交互需求的话 直接加载远程 url 不就行了
    musi
        9
    musi  
       Jul 26, 2024 via iPhone
    1. 可以 loadUrl 加载线上地址
    2. 可以用 monorepo 将 electron 和 web 放到一个存储库编写对应的构建脚本进行构建
    3. 可以用 git submodule 实现两个仓库共用一份 web 代码
    webszy
        10
    webszy  
       Jul 26, 2024
    不太理解。。。你就新建一个一个 electron 项目,然后写代码的时候可以通过环境变量来控制逻辑,比如 if ( electron ) xxx ,然后两条打包命令分别打包不就行了。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2636 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 16:08 · PVG 00:08 · LAX 09:08 · JFK 12:08
    ♥ Do have faith in what you're doing.