如何在 node-webkit 中获取工作目录
Posted
技术标签:
【中文标题】如何在 node-webkit 中获取工作目录【英文标题】:How to get working directory in node-webkit 【发布时间】:2013-05-19 09:37:12 【问题描述】:我有一个可以从命令行运行的简单程序。 该程序用于 Markdown 文件的实时预览。 当我用
打包应用程序时cat $NW/nw marknow.nw > marknow
并从不同的位置运行:
./build/marknow ../relative/path/to/file.md
我无法获取当前工作目录。
process.cwd()
正在返回 /tmp/something???
?从中调用./build/marknow ../relative/path/to/file.md
的目录。
【问题讨论】:
process.cwd() 正在返回我正在寻找的东西,绝对路径,也许那是 node-webkit 的旧版本? @Maslow:在那种情况下,我想你可能不是在寻找该术语的传统含义中的 cwd - 这是用户启动进程的目录(通常不同于安装应用程序的目录)。你能确认一下吗? 【参考方案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);
添加你想要获取当前路径的代码
// 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] + ']');
使用 node.js 运行“main.js”
我发布了“如何使用 node-webkit 获取当前目录(当前路径)”。
http://hdnua.tistory.com/16
它获取执行 zip 文件的目录。
【讨论】:
【参考方案2】:正如其他答案中所指出的,node-webkit 使用错误的“当前工作目录”启动节点进程(无论如何从命令行的角度来看)。
正如在别处指出的那样,process.env.PWD
实际上包含我们想要的内容(当应用程序从命令行启动时)。一个简单的解决方法是在您的 index.html(或其他一些早期执行的地方)中执行以下操作:
<script type="text/javascript">
if(process.env.PWD)
process.chdir(process.env.PWD);
</script>
快!现在 process.cwd() 返回正确的东西。
显然,此技巧仅适用于从命令行启动的应用程序 - 但话又说回来,它可能仅在应用程序从命令行启动时才需要。
这个问题有一张票,但它是old and dusty
【讨论】:
【参考方案3】:如果 cwd 似乎不起作用,您可以尝试的另一个选项是使用以下内容获取执行目录:
var path = require('path');
var execPath = path.dirname( process.execPath );
这应该会为您提供 exe 的执行目录。 cwd 获取临时目录是因为 node-webkit 在每次运行时处理从临时目录打开文件的方式。
【讨论】:
path.dirname( process.execPath ) 指向 ./build/ 目录而不是当前工作目录。 为了避免使用 scapes 使用execPath.replace(/\\/g,"/");
【参考方案4】:
我认为cwd
有两种不同的含义:
-
应用所在的目录
用户启动应用的目录
在 shell 脚本中 I can see the 2nd meaning applied,但是 node-webkit 社区 seems to be using the 1st
如果我错了,请纠正我,但我认为您正在寻找第二个:用户调用您的应用时所在的路径。
经过一些测试,我终于找到了一种适合我的方法:
process.env.PWD
【讨论】:
当您将项目构建为可执行文件时,process.env.PWD 似乎不可用。 @squaretone:您在 Windows 构建中观察到这一点了吗?我为 mac 做了一个构建,其中 process.env.PWD 确实包含我启动应用程序时所在目录的路径。 我不记得了。我一直在开发两者,但主要是在 Windows 上构建。以上是关于如何在 node-webkit 中获取工作目录的主要内容,如果未能解决你的问题,请参考以下文章
将 node-webkit 应用程序打包为“.appx”(适用于 Windows 8 应用商店)
CSS 加载动画在 NW.js (node-webkit) 中没有动画