我是nodejs的新手.可以节点解析〜(unix主目录)示例~foo,~bar到/ home/foo,/ home/bar
> path.normalize('~mvaidya') '~mvaidya' > path.resolve('~mvaidya') '/home/mvaidya/~mvaidya' >
这种反应是错误的; 我希望~mvaidya必须解决/ home/mvaidya
正如QZ支持所指出的,您可以process.env.HOME
在OSX/Linux上使用.这是一个没有依赖关系的简单函数.
const path = require('path'); function resolveHome(filepath) { if (filepath[0] === '~') { return path.join(process.env.HOME, filepath.slice(1)); } return filepath; }
此NodeJS库通过异步回调支持此功能.它使用etc-passswd lib来执行扩展,因此可能无法移植到Windows或其他非Unix/Linux平台.
https://www.npmjs.org/package/tilde-expansion
https://github.com/bahamas10/node-tilde-expansion
如果您只想扩展当前用户的主页,那么这个更轻量级的API可能就是您所需要的.它同步使用起来更简单,适用于大多数平台.
https://www.npmjs.org/package/expand-home-dir
例子:
expandHomeDir = require('expand-home-dir') expandHomeDir('~') // => /Users/azer expandHomeDir('~/foo/bar/qux.corge') // => /Users/azer/foo/bar/qux.corge
另一个相关的lib是home-dir,它在任何平台上返回用户的主目录:
https://www.npmjs.org/package/home-dir
这不是在Node中的原因是因为~
扩展是一个bash
(或shell)特定的东西.目前还不清楚如何正确逃脱它.有关详情,请参阅此评论.
有各种各样的库提供这个,大多数只是几行代码......
https://npm.im/untildify ; 没有做多少os.homedir()
,请参阅index.js#L10
https://npm.im/expand-tilde ; 基本上os-homedir
用来实现相同的,见index.js#L12
https://npm.im/tilde-expansion ; 这个使用etc-passwd
所以看起来并不是很平台,请参阅index.js#L21
所以你可能想自己这样做.