如何在node-webkit中获取工作目录

时间:2013-05-23 21:06:49

标签: working-directory node-webkit

我有一个可以从命令行运行的简单程序。 此程序用于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 个答案:

答案 0 :(得分:13)

如果cwd似乎不起作用,你可以尝试的另一个选择是获取执行目录,如下所示:

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

这应该会得到exe的执行目录。 cwd获取临时目录,因为node-webkit在每次运行时处理从临时目录中打开文件的方式。

答案 1 :(得分:6)

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

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

    在shell脚本I can see the 2nd meaning applied中,但是node-webkit社区 seems to be using the 1st

    如果我错了,请纠正我,但我认为你正在寻找第二个:用户在打电话给你的应用时的路径。

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

    process.env.PWD

答案 2 :(得分:1)

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

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

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

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

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

此问题有一张票,但它是old and dusty

答案 3 :(得分:1)

如果所有答案均告失败,请尝试此操作。

  1. 创建文件&#34; main.js&#34;并复制此代码。

    // 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. 运行&#34; main.js&#34; with node.js

  4. 我发布了&#34;如何使用node-webkit&#34;获取当前目录(当前路径)。

    http://hdnua.tistory.com/16

    它会执行zip文件的目录。