Electron 的 app.getAppPath() 指向哪里?

Posted

技术标签:

【中文标题】Electron 的 app.getAppPath() 指向哪里?【英文标题】:Where is Electron's app.getAppPath() pointing to? 【发布时间】:2017-03-23 13:05:02 【问题描述】:

我正在使用 browserify 将我的应用程序的所有 .js 文件合并到 dist/main.js 中。我的package.json 看起来像:

"main": "./dist/main.js",
"scripts": 
    "start": "electron ./dist/main.js",
,
"bin": 
  "electron": "./node_modules/.bin/electron"

我可以使用npm run start 正确运行我的应用程序。 但是,如果在main.js 我使用app.getAppPath() 我得到:

/home/myuser/projects/electronProject/node_modules/electron/dist/resources/default_app.asar

我希望这是

/home/myuser/projects/electronProject/dist/main.js

我误解了这个方法的用法吗?如何获取 Electron 程序入口点的路径? default_app.asar的作用是什么?

谢谢

【问题讨论】:

【参考方案1】:

你为什么不使用 __dirname (node.js) 或 process.resourcesPath (electron)?

https://github.com/electron/electron/blob/master/docs/api/process.md https://nodejs.org/docs/latest/api/globals.html#globals_dirname

【讨论】:

实际上问题来自electron-reload 正在使用它,实际上它似乎对我不起作用。我会将您的问题作为 github 问题转发给作者。 只是评论说.. 使用 __dirname 是比 getAppPath() 更有弹性的解决方案。根据您的 package.json,否则您可能会得到意想不到的结果【参考方案2】:

返回当前应用目录:

app.getAppPath() 返回 String - 当前应用程序目录。

来自docs。

asar 文件是一种简单的存档格式,它只是将文件相互附加。我不确定您是如何构建应用程序的,但electron-packagerelectron-builder 等工具将文件输出到resources/app.asar 存档并从那里运行文件。这意味着您当前的应用程序目录将是something/resources/app.asar。从那里您的主文件位于something/resources/app.asar/main.js

【讨论】:

事实上,我既没有使用electron-packager,也没有使用electron-builder。 Electron 使用不在 .asar 包中的文件启动,这就是为什么我不明白它为什么指向那里的原因。文档说当前应用程序目录,在我看来这很模棱两可。 同样的问题,我正在使用 VSCode。在 launch.json 文件中,"cwd": "$workspaceFolder" 仍然无法正常工作。你现在解决了吗?【参考方案3】:

谁可能遇到同样的问题... 可能是package.json 中的电子配置字段main 有问题

主字段指定的脚本是你的启动脚本 应用程序,它将运行主进程。

来自offical websites的示例代码:


  "name": "your-app",
  "version": "0.1.0",
  "main": "main.js",
  "scripts": 
    "start": "electron ."
  

app.getAppPath() 输出:

YOUR_PATH_TO/electron-quick-start

如果把代码sn-p改成


  "name": "your-app",
  "version": "0.1.0",
  "main": "main.js",
  "scripts": 
    "start": "electron YOUR_PATH_TO/main.js"
  

然后 app.getAppPath() 输出:

YOUR_PATH_TO/electron-quick-start/node_modules/electron/dist/resources/default_app.asar

所以解决方法是:如果要更改启动脚本,请在ma​​in字段中更改,而不仅仅是在scritps中更改> 领域...

【讨论】:

感谢您指出这一点。 __dirname 是要走的路

以上是关于Electron 的 app.getAppPath() 指向哪里?的主要内容,如果未能解决你的问题,请参考以下文章

Electron——查看Electron的版本

Electron——查看Electron的版本

electron开机自动启动有用吗

用electron将Vue项目打包为window和Mac桌面应用 (electron-packager与electron-build)

electron教程: 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)

electron框架优缺点