为node.js子进程设置环境变量

时间:2014-11-26 14:52:05

标签: node.js environment-variables node-webkit child-process

我有一个节点webkit应用程序,其中一部分涉及在节点中使用子进程来调用pdftk(一个单独的命令行程序)。

我不希望我的用户必须安装pdftk或使用命令行,因此我将pdftk包含在node webkit app的打包版本中。如果我从命令行运行这个打包的应用程序,它运行正常 - 我认为这是因为它使用的是我的计算机上安装的pdftk版本,而不是与我的计算机上安装的版本。应用

当我尝试通过双击gui中的图标来启动应用程序时,由于我希望用户能够做到,我得到一个node.js错误 - 子进程ENOENT。我认为这是因为当通过gui启动时,它不会从我的命令行环境继承环境变量(包括PATH)。

我知道我可以在调用子进程时将环境变量设置为一个选项,但是还没有能够弄清楚如何正确地执行此操作。我不确定应该设置哪个变量,或者我应该将它设置为什么。我想我不确定是否可以从打包的应用程序中调用pdftk,或者我是否需要让用户在自己的计算机上安装它。任何帮助将非常感激。

1 个答案:

答案 0 :(得分:0)

我认为这可能与环境变量无关。我想当你从命令行运行时,当前工作目录(CWD)就是应用程序所在的位置。我认为您将pdftk relative 的路径设置为节点脚本。双击(快捷方式)时,当前工作目录和节点脚本所在的路径不同,因此相对路径无法按预期工作。

使用相对路径时,请始终使用__dirname获取节点脚本所在的路径,并使用它来设置pdftk文件的路径。执行此操作时,path.resolve函数非常有用。阅读path.resolve documentation

我强烈建议您查看此问题和答案