我是nodejs的新手.可以节点解析〜(unix主目录)示例~foo,~bar到/ home/foo,/ home/bar
> path.normalize('~mvaidya')
'~mvaidya'
> path.resolve('~mvaidya')
'/home/mvaidya/~mvaidya'
>
这种反应是错误的; 我希望~mvaidya必须解决/ home/mvaidya
Pj *_*etz 26
正如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;
}
Run Code Online (Sandbox Code Playgroud)
wir*_*res 15
这不是在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
所以你可能想自己这样做.
Ton*_*gan 12
此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
Run Code Online (Sandbox Code Playgroud)
另一个相关的lib是home-dir,它在任何平台上返回用户的主目录:
https://www.npmjs.org/package/home-dir
Run Code Online (Sandbox Code Playgroud)
Bai*_*ong 11
一个例子:
const os = require("os");
"~/Dropbox/sample/music".replace("~", os.homedir)
Jar*_*eda 11
这是之前一些答案的组合,并添加了更多的安全性。
/**
* Resolves paths that start with a tilde to the user's home directory.
*
* @param {string} filePath '~/GitHub/Repo/file.png'
* @return {string} '/home/bob/GitHub/Repo/file.png'
*/
function resolveTilde (filePath) {
const os = require('os');
if (!filePath || typeof(filePath) !== 'string') {
return '';
}
// '~/folder/path' or '~' not '~alias/folder/path'
if (filePath.startsWith('~/') || filePath === '~') {
return filePath.replace('~', os.homedir());
}
return filePath;
}
Run Code Online (Sandbox Code Playgroud)
os.homedir()而不是process.env.HOME.os.homedir()如果传入非字符串,您可能希望默认返回而不是返回空字符串。~/或 开头~,而不是替换其他别名,例如~stuff/..slice(1)。我今天刚需要它,唯一不太回避的命令是os.
$ node
> os.homedir()
'/Users/mdesales'
Run Code Online (Sandbox Code Playgroud)
我不确定你的语法是否正确,因为 ~ 已经是当前用户的主目录的结果
| 归档时间: |
|
| 查看次数: |
16001 次 |
| 最近记录: |