当我做cd myapp/
和electron app.js
, process.cwd()
的输出是/Users/maxogden/myapp
。
但是,当我使用electron-packager打包 + 运行我的应用程序时,这意味着我的应用程序现在位于Contents/Resources/app
文件夹中,位于发布页面process.cwd()
官方Electron.app
的修改副本中process.cwd()
是/
。
我不确定为什么 Electron 决定在 process.cwd 设置为/
下运行我的应用程序,但这就是它的工作原理,如果您在 Atom 的控制台中运行process.cwd()
.app 你也会得到/
。
我的问题是我无法获取应用程序源文件的路径,唯一的方法是在应用程序的主可执行脚本中捕获__dirname
的值,但这不是一个好的解决方案像我的模块menubar这样的情况,API 目前是这样的:
var menubar = require('menubar')
var mb = menubar()
mb.on('ready', function ready () {
console.log('app is ready')
})
但是,在一个应用程序容器包装时,这是行不通的,因为菜单栏的外观为用户index.html
使用页面加载process.cwd()
这里,但是因为process.cwd()
为/
而不是/Users/maxogden/myapp/Example.app/Contents/Resources/app
它找不到 index.html 并且应用程序不会加载。
Node 应用程序一般没有这个问题,因为 process.cwd() 总是可靠的,这个问题是由 process.cwd() 设置为/
(它可能是 Mac OS X 的东西,谁知道)。
为了修复它,我可以要求使用菜单栏的用户传入__dirname
,但这并不理想或用户友好。
我提出了以下解决方案之一来解决此问题:
process.cwd()
更改为实际的应用程序文件夹app.getPath
添加一个返回应用程序文件夹路径的新选项查看process.resourcesPath
,这基本上就是您对第二个选项的描述
@paulcbetts ahhhhhh 谢谢,我https://github.com/atom/electron/blob/cd0aa4a956cb7a13cbe0e12029e6156c3e892924/docs/api/process.md#process -object 存在(我没想到process
猴子电子
在原子中存在这个问题,其中path.resolve('something')
将解析为/something
。 它为我打破了 tslint。 这有助于:
打开 init.coffee(Atom > Preferences > Init Script...)并添加:
process.chdir(atom.project.getPaths()[0])
最有用的评论
查看
process.resourcesPath
,这基本上就是您对第二个选项的描述