2014-01-12 27 views
23

我是nodejs的新手。 CAN节点的决心〜(UNIX主目录)例如〜FOO,酒吧〜 到/ home/foo的,/家庭/条在node.js中展开/解析〜

 
> path.normalize('~mvaidya') 
'~mvaidya' 
> path.resolve('~mvaidya') 
'/home/mvaidya/~mvaidya' 
> 

这种反应是错误的;我希望〜mvaidya必须解析为/ home/mvaidya

回答

10

此NodeJS库通过异步回调支持此功能。它使用etc-passswd lib来执行扩展,因此可能不能移植到Windows或其他非Unix/Linux平台。

如果只想扩大主页的当前用户那么这个重量更轻的API可能是你所需要的。它也是同步在大多数平台上使用和工作的简单方法。

例子:

expandHomeDir = require('expand-home-dir') 

expandHomeDir('~') 
// => /Users/azer 

expandHomeDir('~/foo/bar/qux.corge') 
// => /Users/azer/foo/bar/qux.corge 

另一个相关的LIB是家庭-dir的任何平台上返回用户的主目录:

https://www.npmjs.org/package/home-dir 
+8

对于那些可以在Linux/Unix/Mac上使用当前的主目录,'process.env。HOME'似乎可以很好地代替其他帖子中提到的节点模块解决方案。例如'〜/ somepath'可以是'process.env.HOME +'/ somepath',但是会警告......它不会解决原来的'〜someuserhome/somepath'问题,因为这需要链接模块解决方案。 – tresf

17

由于QZ Support指出,您可以在OSX/Linux上使用process.env.HOME。这是一个简单的函数,没有依赖关系。

const path = require('path'); 
function resolveHome(filepath) { 
    if (filepath[0] === '~') { 
     return path.join(process.env.HOME, filepath.slice(1)); 
    } 
    return filepath; 
} 
+1

当技术上它应该解析为'/ home/foo'(至少在zsh中)时,会错误地将'〜foo'解析为'/ home/<当前用户>/foo'。 – mpen

6

的原因,这不是在节点是因为~膨胀是bash(或壳)特定的东西。目前还不清楚如何正确摆脱它。有关详细信息,请参阅this comment

有提供这种各种库,大部分只需要几行代码...

所以,你可能想这个做自己。

+1

欣赏背景解释,'〜'是一个bash事物。 – the0ther

+0

os.homedir()正是我期待的!谢谢! – math2001