节点应用程序在全局安装时对路径中的转义字符进行处理

时间:2016-03-21 17:02:20

标签: node.js npm npm-install

我对这个节点的东西很新,所以可能有一个非常简单的答案,但无论如何......

我正在构建一个提示输入文件路径的应用。通过将文件放入终端窗口来提供此路径,该窗口提供如下所示的空间转义路径:

Users/[username]/Desktop/test\ file.txt

然后我使用jsonfile将此路径添加到数组并写出JSON文件。在此文件中,路径现在具有转义转义,如下所示:

Users/[username]/Desktop/test\\ file.txt

现在我想从JSON中获取该路径并在Finder中显示它,这就是我迷路的地方。我正在使用mac-open通过传递-R选项来显示路径,这在我使用node bin/my-code.js测试和运行代码时工作正常,但是一旦我安装了npm install -g .它打破了。安装工作,我可以运行应用程序(还有其他功能正常工作)但现在如果我试图揭示路径我得到错误:

{ [Error: Command failed: /bin/sh -c open -a "Finder" -R "/Users/[username]/Desktop/test\\\ file.txt"
The file /Users/[username]/Desktop/test\\ file.txt does not exist.
]
  killed: false,
  code: 1,
  signal: null,
  cmd: '/bin/sh -c open -a "Finder" -R "/Users/[username]/Desktop/test\\\\\\ file.txt"' }

我注意到错误中不同路径引用中的转义量不等,所以我的问题是:

  1. 当我使用node bin/my-code.js进行测试时,为何会有所不同 当我全局安装并以这种方式运行时?
  2. 我是否有办法让这两个行为相同,因为每次我想测试代码时都不想安装?
  3. 是否有更强大的存储和/或转义文件路径的方法?
  4. 抱歉,这有点漫无边际。欢迎任何建议:)

1 个答案:

答案 0 :(得分:0)

所以我还没有完全回答我提出的所有问题,但我已经解决了这个问题并且学到了我认为在Node开发中非常有价值的一课。

试图找到我实际打开源mac-open的问题,并且这样做意识到我实际上根本不需要使用附加模块。搜索源代码让我看到了关于child_process的阅读,并最终解开了整个mac-open模块的简单:

var exec = require("child_process").exec;

exec("open " +assetsPath +" -R", function(err){
    if(err)
        console.log(err);
});

这里的esson不是因为它们在那里而使用第三方模块。在这种情况下,我并不需要它试图提供的所有情况,并且额外的复杂性实际上导致了这个问题。