【问题标题】:Get the path to the current application in node-webkit在 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中找到当前应用程序路径的正确方法是什么?

【问题讨论】:

    标签: 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
        

        【讨论】:

          猜你喜欢
          • 2016-05-08
          • 2012-05-23
          • 1970-01-01
          • 2016-02-28
          • 2010-12-02
          • 1970-01-01
          • 2010-10-26
          • 2012-08-29
          • 1970-01-01
          相关资源
          最近更新 更多