我有一个Electron 应用程序,将使用一个 node 脚本执行,该脚本将每周运行一次cron.我需要执行一个python文件,它位于一个名为dependencies的文件夹中,它是在我使用npm run electron:build进行构建时创建的.我没有使用应用程序的安装程序,但我正在运行包含应用程序的win-unpacked文件夹中的exe文件.如果我运行开发模式,所有工作正常,则会执行包含Python脚本的文件,但在生产应用程序中,应用程序将无法识别依赖文件夹,如果它存在的话.如何正确指向在构建过程中创建的asar之外的文件夹?

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
            }
// The file and the folder exists but electron seems not recognize it with this path
            fs.readFile('dependencies/cleaner.py', (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')
        })
    }
})

推荐答案

Electron 的app(https://www.electronjs.org/docs/latest/api/app)模块可以在这里成为你的朋友.它包含一个名为getPath()的帮助器函数,该函数返回各种路径.

在您的例子中,app.getPath('exe')将是最合适的,因为它返回应用程序可执行文件的名称和路径.如果你把它和path.parse().dir结合起来,你可以检索到实际的路径.

例如:

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

fs.readFile(path.join(path.parse(app.getPath('exe')).dir, 'dependencies', 'cleaner.py'), (error, buffer) => {});

Javascript相关问答推荐

使用JavaScript在ionic Web应用程序中更新.pane和.view的背景 colored颜色

单击更新页面的按钮后,页面刷新;测试/断言超时,有两个标题,但没有一个标题

通过在页面上滚动来移动滚动条

没有输出到带有chrome.Devtools扩展的控制台

GrapeJS -如何保存和加载自定义页面

如何在Angular中插入动态组件

如何在Javascript中的控制台上以一行形式打印循环的结果

如何使用子字符串在数组中搜索重复项

S文本内容和值不必要的不同

Chart.js-显示值应该在其中的引用区域

VUE 3捕获错误并呈现另一个组件

当id匹配时对属性值求和并使用JavaScript返回结果

确保函数签名中的类型安全:匹配值

Webpack在导入前混淆文件名

我想使用GAS和HTML将从Electron 表格中获得的信息插入到文本字段的初始值中

当从其他文件创建类实例时,为什么工作线程不工作?

JavaScript&;Reaction-如何避免在不使用字典/对象的情况下出现地狱?

rxjs在每次迭代后更新数组的可观察值

React数组查找不读取变量

扩散运算符未按预期工作,引发语法错误