我是nodejs的新手。 CAN节点的决心〜(UNIX主目录)例如〜FOO,酒吧〜 到/ home/foo的,/家庭/条在node.js中展开/解析〜
> path.normalize('~mvaidya') '~mvaidya' > path.resolve('~mvaidya') '/home/mvaidya/~mvaidya' >
这种反应是错误的;我希望〜mvaidya必须解析为/ home/mvaidya
我是nodejs的新手。 CAN节点的决心〜(UNIX主目录)例如〜FOO,酒吧〜 到/ home/foo的,/家庭/条在node.js中展开/解析〜
> path.normalize('~mvaidya') '~mvaidya' > path.resolve('~mvaidya') '/home/mvaidya/~mvaidya' >
这种反应是错误的;我希望〜mvaidya必须解析为/ home/mvaidya
此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
今天我使用https://github.com/sindresorhus/untildify
我在OSX上运行,运行良好。
由于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;
}
当技术上它应该解析为'/ home/foo'(至少在zsh中)时,会错误地将'〜foo'解析为'/ home/<当前用户>/foo'。 – mpen
的原因,这不是在节点是因为~
膨胀是bash
(或壳)特定的东西。目前还不清楚如何正确摆脱它。有关详细信息,请参阅this comment。
有提供这种各种库,大部分只需要几行代码...
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
所以,你可能想这个做自己。
对于那些可以在Linux/Unix/Mac上使用当前的主目录,'process.env。HOME'似乎可以很好地代替其他帖子中提到的节点模块解决方案。例如'〜/ somepath'可以是'process.env.HOME +'/ somepath',但是会警告......它不会解决原来的'〜someuserhome/somepath'问题,因为这需要链接模块解决方案。 – tresf