Nodejs Path 模块常用方法与用法(详细列举)

35 阅读2分钟

一、简介

  • Node.jspath 模块用于处理和操作文件路径,是一个核心模块,无需安装即可使用。下面是对 path 模块的常用方法和用法的详细介绍。
  • Node.js 中,首先需要通过 require 引入 path 模块:

    const path = require('path');
    

二、常用方法

> path.join([...paths])

  • 拼接路径片段,自动添加路径分隔符并规范化路径。

    const fullPath = path.join('/users', 'john', 'docs', 'file.txt');
    console.log(fullPath); // 输出: '/users/john/docs/file.txt'
    
  • 自动去掉多余的斜杠:

    const fixedPath = path.join('/users/', '/john/', '//docs', 'file.txt');
    console.log(fixedPath); // 输出: '/users/john/docs/file.txt'
    

> path.resolve([...paths])

  • 根据路径片段解析成绝对路径,从右到左拼接,直到生成一个绝对路径为止。

    const absPath = path.resolve('docs', 'file.txt');
    console.log(absPath); // 输出: '/当前工作目录/docs/file.txt'
    
  • 如果路径片段中有绝对路径,解析会从绝对路径开始:

    const absPath = path.resolve('/users', 'john', 'file.txt');
    console.log(absPath); // 输出: '/users/john/file.txt'
    

> path.basename(path[, ext])

  • 返回路径中的文件名部分。

    const fileName = path.basename('/users/john/docs/file.txt');
    console.log(fileName); // 输出: 'file.txt'
    
    // 如果传入扩展名,则会移除扩展名
    const fileNameWithoutExt = path.basename('/users/john/docs/file.txt', '.txt');
    console.log(fileNameWithoutExt); // 输出: 'file'
    

> path.dirname(path)

  • 返回路径中的目录部分。

    const dirName = path.dirname('/users/john/docs/file.txt');
    console.log(dirName); // 输出: '/users/john/docs'
    

> path.extname(path)

  • 返回路径中文件的扩展名。

    const ext = path.extname('/users/john/docs/file.txt');
    console.log(ext); // 输出: '.txt'
    

> path.parse(path)

  • 解析路径为一个对象,包含路径的各个部分。

    const parsed = path.parse('/users/john/docs/file.txt');
    console.log(parsed);
    // 输出:
    // {
    //   root: '/',
    //   dir: '/users/john/docs',
    //   base: 'file.txt',
    //   ext: '.txt',
    //   name: 'file'
    // }
    

> path.format(pathObject)

  • path.parse 返回的对象格式化为路径字符串。

    const formattedPath = path.format({
      root: '/',
      dir: '/users/john/docs',
      base: 'file.txt'
    });
    console.log(formattedPath); // 输出: '/users/john/docs/file.txt'
    

> path.isAbsolute(path)

  • 判断路径是否为绝对路径。

    console.log(path.isAbsolute('/users/john')); // 输出: true
    console.log(path.isAbsolute('users/john'));  // 输出: false
    

> path.relative(from, to)

  • 返回从 fromto 的相对路径。

    const relPath = path.relative('/users/john/docs', '/users/john/images');
    console.log(relPath); // 输出: '../images'
    

> path.normalize(path)

  • 规范化路径,自动处理 ...

    const normalizedPath = path.normalize('/users/john/../john/docs/./file.txt');
    console.log(normalizedPath); // 输出: '/users/john/docs/file.txt'
    

> path.sep

  • 返回系统特定的路径分隔符(Windows\POSIX/)。

    console.log(path.sep); // 输出: '/' 或 '\'
    

> path.delimiter

  • 返回环境变量路径分隔符(Windows;,POSIX 为 :)。

    console.log(path.delimiter); // 输出: ':' 或 ';'
    

三、常见用例

> 获取项目的根目录路径

const rootDir = path.resolve(__dirname, '..');
console.log(rootDir); // 当前文件所在目录的上一级

> 拼接路径

const filePath = path.join(__dirname, 'data', 'file.json');
console.log(filePath);
// 输出: '/当前目录/data/file.json'

> 解析文件路径

const fileInfo = path.parse('/users/john/docs/file.txt');
console.log(`目录: ${fileInfo.dir}`);
console.log(`文件名: ${fileInfo.name}`);
console.log(`扩展名: ${fileInfo.ext}`);

> 动态生成文件路径

const logFilePath = path.format({
  dir: path.join(__dirname, 'logs'),
  name: 'error',
  ext: '.log'
});
console.log(logFilePath); // 输出: '/当前目录/logs/error.log'

> 获取相对路径

const relPath = path.relative('/users/john/docs', '/users/john/images');
console.log(relPath); // 输出: '../images'