在node.js中扩展/解析〜

 blue秋夜听雨321 发布于 2023-02-04 12:33

我是nodejs的新手.可以节点解析〜(unix主目录)示例~foo,~bar到/ home/foo,/ home/bar

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

这种反应是错误的; 我希望~mvaidya必须解决/ home/mvaidya

3 个回答
  • 正如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;
    }
    

    2023-02-04 12:36 回答
  • 此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
    

    2023-02-04 12:36 回答
  • 这不是在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

    所以你可能想自己这样做.

    2023-02-04 12:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有