You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron如何指向asar打包应用外部的路径?

Electron生产环境访问asar外部文件夹的解决方案

问题根源

开发模式下,相对路径dependencies/cleaner.py能正常指向项目根目录下的文件夹,但生产环境中Electron会将代码打包进asar文件,此时相对路径会默认从asar包内部的当前路径查找,而你的dependencies文件夹是在asar包外部的win-unpacked相关目录中,导致路径匹配失败。

解决步骤

  1. 获取可执行文件的绝对路径:通过Electron的app.getPath('exe')获取当前运行的exe文件路径,再用path模块解析出exe所在的win-unpacked文件夹目录。
  2. 拼接外部文件夹的绝对路径:根据你构建后dependencies的实际位置,拼接出该文件夹的绝对路径(比如如果dependencies和win-unpacked同级,就从exe目录向上跳转一级;如果在win-unpacked内部,直接在exe目录下拼接)。
  3. 替换代码中的相对路径:用拼接好的绝对路径替代原来的相对路径,确保能正确访问asar外部的文件。

修改后的代码示例

const { app } = require('electron');
const path = require('path');
const fs = require('fs');

ipcMain.on('saveExtractionData', (event, ...args) => {
    // Other code stuff ...  
    if( !fs.existsSync( outputDir ) ){
        console.log(`Output folder not exist. Creating folder at: ${outputDir}`);
        fs.mkdir( outputDir, (err) => {
            if( err ){
                throw err
            }
            // 获取exe所在目录(win-unpacked文件夹路径)
            const exePath = app.getPath('exe');
            const exeDir = path.dirname(exePath);
            
            // 根据实际目录结构拼接dependencies路径:
            // 情况1:dependencies和win-unpacked同级
            const dependenciesDir = path.join(path.dirname(exeDir), 'dependencies');
            // 情况2:dependencies在win-unpacked内部
            // const dependenciesDir = path.join(exeDir, 'dependencies');
            
            const cleanerPyPath = path.join(dependenciesDir, 'cleaner.py');
            
            fs.readFile(cleanerPyPath, (error, buffer) => {
                if(error){
                    throw error
                }
                fs.writeFileSync( path.join(outputDir, 'cleaner.py'), buffer)
            })
            fs.writeFile( path.join(outputDir, `${filename}.xlsx`), fileBuffer, (error) => {
                if( error ){
                    throw error
                }
                console.log(`Writing file ${filename}.xlsx into ${outputDir} folder...`);
                event.sender.send('resetExtractionData')
            })
        })
    } else { 
        fs.writeFile( path.join(outputDir, `${filename}.xlsx`), fileBuffer, (error) => {
            if( error ){
                console.log(error)
                throw error
            }
            console.log(`Writing file ${filename}.xslx into ${outputDir} folder...`)
            event.sender.send('resetExtractionData')
        })
    }
})

注意事项

  • 确认构建后dependencies文件夹的实际位置,选择对应的路径拼接方式。
  • 测试生产环境时,直接运行win-unpacked内的exe,可通过console.log(dependenciesDir)输出验证路径是否正确。

内容的提问来源于stack exchange,提问作者OHICT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:46:10