forge-electron打包时静态资源的一些问题

827 阅读2分钟

forge-electron目前已经是electron官方推荐的项目配置和打包工具,它提供了针对vite或webpack的模板,集成vue\react等框架

笔者在此记录为依靠vite+vue3时,在进行编译、安装运行后遇到一些静态资源的问题

场景一:对于"纯"静态资源,如图片等可直接参考下文

Electron Forge + Vite 项目 Electron 静态资源处理

原理是依靠rollup-plugin-copy将静态资源文件拷贝到对应的build文件夹,因此会被一起打包进最终的app.asar包中

场景二:静态资源中包含可执行文件

这里的可执行文件可能是想要通过spawn创建子进程执行的各种脚本,exe等等

详解 Electron 中的 asar 文件一文中阐述了asar文件的结构,以及使用-asar-包官网的描述

asar是一个虚拟文件系统,无法直接运行里面的可执行文件

electron给出的解决办法之一也是重写部分node api如fs.open等,实际也是在运行时先解压出文件再运行,我想这必然会带来性能消耗

因此最好的方法还是就不要将可执行文件打包进asar中

forge-electron的配置文件中可以设置两种方式达成目的:

法一:unpack

首先forge-electron提供了一个插件用于自动识别node_modules中的可执行文件 Auto Unpack Native Modules Plugin

其次为forge.config.ts中的配置项,unpack或unpackDir用于指定不想要打包进asar的文件或目录,相应的文件会被放在app.asar同级文件夹app.asar.unpacked下

注意:这里的路径为"/.vite/build/static",如果写成"/static"就不会起作用

const config: ForgeConfig = {
    packagerConfig: {
        // 对应法一 asar unpack的配置
        asar: {
            // unpack: "**/.vite/build/static/scripts/*.js",
            unpackDir: "**/.vite/build/static",  
        },
        // 对应法二
        extraResource: ["extra", "config.ts"],
    },

法二:extraResource

如上代码中的配置,用于指定而外的文件夹或文件,相对应的文件会被直接拷贝到resource目录下(打包后可以通过process.resourcesPath获取路径),与app.asar同级