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-packager
和electron-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
所以解决方法是:如果要更改启动脚本,请在main字段中更改,而不仅仅是在scritps中更改> 领域...
【讨论】:
感谢您指出这一点。 __dirname 是要走的路以上是关于Electron 的 app.getAppPath() 指向哪里?的主要内容,如果未能解决你的问题,请参考以下文章
用electron将Vue项目打包为window和Mac桌面应用 (electron-packager与electron-build)
electron教程: 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)