node.js - 如何将此目录包含在 $PATH 环境变量中?

标签 node.js path environment-variables

我正在为 Github's Atom 构建一个包编辑器和我遇到了一个挑战,试图让子进程使用 Node js 执行。我很确定问题是 Atom 运行的环境不包含 mrt 脚本的路径。所以当我从我的包中运行它时:

exec = require("child_process").exec
child = undefined
child = exec("/usr/local/bin/mrt add iron-router", { cwd: path },(error, stdout, stderr) -
  console.log "stdout: " + stdout
  console.log "stderr: " + stderr
  console.log "exec error: " + error  if error isnt null
  return
)

在控制台中,我得到:

enter image description here

Atom 内置了一个 Web 检查器,您实际上可以看到 Atom 包含的路径。因此,当我进入 Atom 的控制台并输入: process.env.PATH 时,它会显示路径:/usr/bin:/bin:/usr/sbin:/sbin。所以我需要以某种方式让atom知道mrt脚本的路径。有人知道我该怎么做吗?

我还联系了 Atom's discussion forum昨天,但还没有想出解决办法。

编辑:

我还应该注意,执行 mrt 软件包安装程序的正常命令是 mrt add package-name 但如 Atom's discussion forum 上的建议。 ,我一直使用完整路径。

编辑2:

我已经在我的 /usr/bin 目录中创建了指向 Node 的符号链接(symbolic link),并且它现在正在工作。现在我试图让 Node 使用 fs.symlink 为我创建符号链接(symbolic link),但这似乎不起作用。

最佳答案

总而言之,问题在于 Atom 使用启动时的 PATH。因此,到 Node 的路径和到 mrt 的路径不包含在 Atom 的路径中。当 Atom 讨论论坛上有人指出 Atom 的 Class BufferedNodeProcess 时,我找到了解决方案。 。 在回答时,该类有一个小错误,所以我无法使用它 - Github 团队工作得很快,如果它在接下来的几天内得到修复,我不会感到惊讶。不过,我能够使用一些代码来获取 Atom 的环境。另外,我最终使用了 node's spawn method而不是执行,因为这就是 BufferedNodeProcess 使用的。另外,您可以读取标准输出的每一行。

options =
  cwd: atom.project.getPath()

options.env = Object.create(process.env)  unless options.env?

options.env["ATOM_SHELL_INTERNAL_RUN_AS_NODE"] = 1
node = (if process.platform is "darwin" then path.resolve(process.resourcesPath, "..", "Frameworks", "Atom Helper.app", "Contents", "MacOS", "Atom Helper") else process.execPath)

mrt = spawn(node, [
  "/usr/local/lib/node_modules/meteorite/bin/mrt.js"
  "add"
  "iron-router"
], options )

mrt.stdout.on "data", (data) ->
  console.log "stdout: " + data
  return

mrt.stderr.on "data", (data) ->
  console.log "stderr: " + data
  return

mrt.on "close", (code) ->
  console.log "child process exited with code " + code
  return

关于node.js - 如何将此目录包含在 $PATH 环境变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22436962/

相关文章:

cmd - 当只有两个参数时,使用 "setx"的语法无效,因为有两个以上的参数

angular - 如何为 Firebase Cloud Functions 使用应用程序环境变量?

ruby - 如何在 Ruby 脚本中为命令 shell 获取环境变量?

node.js - RabbitMQ "access to vhost ' OWN' 被拒绝”

javascript - require() : using module. 导出 vs 直接分配给 "this"

css - 我的外部 .css 链接在 aptana 中失败,但可以在实时网络服务器上运行;我怎样才能解决这个问题?

php - require_once 无法打开流 : No such file or directory - even if relative path seems to be correct(? )

node.js - 打开 "localhost:4000"的链接

javascript - EJS 和 Express - 如何将数据传递给标签属性?

java -version 无法识别,而 PATH 和 JAVA_HOME 均已设置,Windows 8