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同级