在 node-webkit 中获取当前应用程序的路径

Posted

技术标签:

【中文标题】在 node-webkit 中获取当前应用程序的路径【英文标题】:Get the path to the current application in node-webkit 【发布时间】:2012-11-26 20:07:52 【问题描述】:

在 node-webkit 中,有没有办法找到当前应用程序的路径?在node.js中,你可以使用__dirname找到当前应用的路径,但是在node-webkit中,变量__dirname似乎是未定义的。

以下 node.js 脚本正确打印文件路径:

console.log(__dirname)

以下 node-webkit 脚本无法正确打印文件路径:

<script type = "text/javascript">
    alert(__dirname);
</script>

在node-webkit中找到当前应用程序路径的正确方法是什么?

【问题讨论】:

【参考方案1】:

接受的答案的链接不再可用,所以这里是一个简短的答案:

nw.js 每次运行时都会将应用的内容提取到一个临时目录中。

如果您想访问 nw.js 提取应用程序的路径,请使用 process.cwd()

如果您想访问可执行应用程序的路径,请使用:

var path = require('path');
var nwDir = path.dirname(process.execPath);

【讨论】:

【参考方案2】:

这里讨论了这个问题的答案:https://groups.google.com/d/topic/node-webkit/IwGzluFC9iU/discussion

在 Windows 上,使用“process.execPath”查看启动它的可执行文件的路径。然后从那里开始工作,从路径中删除可执行文件的文件名以获取文件夹的路径(假设您的应用程序的 .nw 是相对于可执行文件或与之组合的)。

无论是使用压缩的“app.nw”还是“nw.exe”和“app.nw”组合成一个可执行文件 (app.exe),这对我都有效。

【讨论】:

能否请您复制解决方案的摘要。一旦外部资源失效,仅链接的答案往往会失去所有价值。 在此答案中提到的讨论中,建议使用window.location 获取路径。如果 node-webkit 应用程序是从 nw 文件运行的,则路径将是临时路径(node-webkit 将 nw 文件提取到的路径)。 如果 main 是外部 Uri 或导航发生在远离根文件夹的位置,则不起作用。 邮件列表被删除。请更新或删除您的链接。【参考方案3】:

如果您正在寻找应用程序源的路径(即包含package.json 的文件夹),那么您可以使用process.cwd()

无论环境的真正工作目录是什么,在启动节点可执行文件时,都会将process.cwd() 设置为App 源的位置。如果应用程序包含在存档中,cwd 将指向提取源的临时文件夹

重要的是,请注意process.cwd() 可以在process.chdir(newPath) 运行的应用程序期间更改,也可能由其他事件更改,因此您可能希望在应用程序启动时存储初始值。

编辑: 澄清一下,process.cwd() 设置为包含正在运行的应用程序使用的实际 package.json 文件的文件夹。因此,如果您已将应用程序打包为存档或可执行文件(zip、exe、nwz、nw 等),则 nw.exe 会在运行应用程序之前将项目文件解压缩到临时目录。所以process.cwd() 将指向那个临时文件夹,不是原始存档或可执行文件的位置。

【讨论】:

这是我需要的,也可能是灵活性的理想选择。 实际上这行不通。我正在尝试通过将 app.nw 与 nw.exe 合并来打包,但我尝试过的任何事情都不会给我应用程序的根目录。在我的情况下,我需要引用一个包含两个目录的 SQLite db。 Erik,“应用程序的根”是什么意思。我在上面发布的方法专门给出了 extracted 文件的位置——而不是 exe(或 .zip、.nw、.nwz 等)的位置。如果应用程序被打包为 zip 或 exe,那么它可能会被解压缩到一个临时文件夹(如上所述)。 对不起,我什至不记得我现在做错了什么。似乎我无法从 .exe 上方的目录访问数据库,但我认为我打包不正确。以某种方式在 exe 上加倍 IIRC。【参考方案4】:

这应该可行:

var nw = require('nw.gui'); //This line is only required for NW.js 0.12.x and below

console.log(nw.__dirname)

【讨论】:

【参考方案5】:

如果您加载了外部 uri,window.location 将不起作用,但无论如何,以下内容似乎可靠:

var path = require('path');
,appPath = path.dirname(require.main.filename)

【讨论】:

我试过这个,发现require.main是未定义的。这是因为 require 被 node-webkit 重新定义,所以 require("nw.gui") 得到特殊处理。你要使用的是global.require.main.filename 在我的情况下也不起作用。我正在尝试从将 nw.exe 与 app.nw 合并的包中引用两个目录。【参考方案6】:

不确定何时添加,但我相信现在获取启动路径的官方方法是:

nw.App.startPath

【讨论】:

以上是关于在 node-webkit 中获取当前应用程序的路径的主要内容,如果未能解决你的问题,请参考以下文章

在 node-webkit 中获取 ctrl-f/ctrl-a 按键

在 node-webkit 中使用默认程序打开文件

CSS 加载动画在 NW.js (node-webkit) 中没有动画

Node-Webkit(nwjs)如何将窗口向右对齐?

保护 node-webkit 桌面应用程序中的源代码

如何从 node-webkit 应用程序打开浏览器窗口?