7

我有一个可以从命令行运行的简单程序。该程序用于 Markdown 文件的实时预览。当我用

cat $NW/nw marknow.nw > marknow

并从不同的位置运行:

./build/marknow ../relative/path/to/file.md

我无法获取当前工作目录。

process.cwd()

正在返回 /tmp/something ???

如何在 node-webkit 中获取工作目录?从中./build/marknow ../relative/path/to/file.md调用的目录。

4

4 回答 4

14

如果 cwd 似乎不起作用,您可以尝试的另一个选项是使用以下内容获取执行目录:

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

这应该为您提供 exe 的执行目录。cwd 获取临时目录是因为 node-webkit 在每次运行时处理从临时目录打开文件的方式。

于 2013-05-24T19:18:59.337 回答
6

我认为cwd有两种不同的含义:

  1. 应用程序所在的目录
  2. 用户启动应用程序的目录

在 shell 脚本中,我可以看到第二个含义,但 node-webkit 社区 似乎正在使用第一个含义

如果我错了,请纠正我,但我认为您正在寻找第二个:用户在调用您的应用程序时所在的路径。

经过一些测试,我终于找到了一种适合我的方法:

process.env.PWD

于 2013-12-05T23:13:42.777 回答
1

正如其他答案中所指出的,node-webkit 使用错误的“当前工作目录”启动节点进程(无论如何从命令行的角度来看)。

正如在别处指出的那样,process.env.PWD实际上包含了我们想要的内容(当应用程序从命令行启动时)。然后,一个简单的解决方法可能是在您的 index.html (或其他一些早期执行的地方)中执行以下操作:

<script type="text/javascript">
  if(process.env.PWD) {
    process.chdir(process.env.PWD);
  }
</script>

快!现在 process.cwd() 返回正确的东西。

显然,这个技巧只适用于从命令行启动的应用程序——但话又说回来,它可能只在应用程序从命令行启动时才需要。

这个问题有一张票,但它又旧又尘土飞扬

于 2015-02-01T22:38:38.247 回答
1

如果所有答案都失败了,试试这个。

  1. 创建文件“main.js”并复制此代码。

    // get child_process module.
    var childproc = require('child_process');
    
    // start process using child_process
    //  with current path string
    // '__dirname' would be not only path
    //  of 'main.js' but also one of 'app.zip'
    //  because 'main.js' and 'app.zip' have same directory
    childproc.exec('nw app.zip ' + __dirname);
    
  2. 添加您想要获取当前路径的代码

    // get 'nw.gui' module
    var gui = require('nw.gui');
    
    // get arguments that we passed
    var arr = gui.App.argv;
    
    // nw app.zip __dirname
    //            ^ argv[0]
    alert('current path: [' + arr[0] + ']');
    
  3. 使用 node.js 运行“main.js”

我发布了“如何使用 node-webkit 获取当前目录(当前路径)”。

http://hdnua.tistory.com/16

它获取执行 zip 文件的目录。

于 2015-06-15T08:39:55.060 回答