Node.js 路径模块

摘要: 在本教程中,您将了解 Node.js 中的 path 模块。

Node.js 提供了一个 path 模块,允许您轻松地与文件路径进行交互。

path 模块具有许多有用的属性和方法来访问和操作文件系统中的路径。

path 是 Node.js 中的核心模块,因此,您无需安装即可使用它。

const path = require('path');Code language: JavaScript (javascript)

如果您使用 ES 模块,您可以按如下方式导入路径。

import path from 'path';Code language: JavaScript (javascript)

有用的路径属性

path 对象具有 sep 属性,该属性表示特定于平台的路径分隔符。

path.sepCode language: JavaScript (javascript)

path.sep 在 Windows 上返回 \,在 Linux 和 macOS 上返回 /

path 对象还具有 delimiter 属性,该属性表示路径分隔符。

path.delimiterCode language: JavaScript (javascript)

path.delimiter 在 Windows 上返回 ;,在 Linux 和 macOS 上返回 :

方便的路径方法

以下是 path 模块的一些方便方法,您可能经常使用它们。

path.basename(path, [,ext])
path.dirname(path)
path.extname(path)
path.format(pathObj)
path.isAbsolute(path)
path.join(...path)
path.normalize(path)
path.parse(path)
path.relative(from, to)
path.resolve(...path)Code language: JavaScript (javascript)

path.basename(path[, ext])

path.basename() 返回指定路径的最后一部分。例如

import path from 'path';

let result = path.basename('/public_html/home/index.html');
console.log(result);Code language: JavaScript (javascript)

输出

index.htmlCode language: JavaScript (javascript)

ext 参数会从路径中过滤掉扩展名。

import path from 'path';

let result = path.basename('/public_html/home/index.html', '.html');
console.log(result);Code language: JavaScript (javascript)

输出

indexCode language: JavaScript (javascript)

path.dirname(path)

path.dirname() 方法返回指定路径的目录名。例如

import path from 'path';

let result = path.dirname('/public_html/home/index.html');
console.log(result);Code language: JavaScript (javascript)

输出

/public_html/homeCode language: JavaScript (javascript)

请注意,path.dirname() 会忽略尾随目录。

path.extname(path)

path.extname() 返回路径的扩展名。例如

import path from 'path';

console.log(path.extname('index.html'));
console.log(path.extname('app.js'));
console.log(path.extname('node.js.md'));Code language: JavaScript (javascript)

输出

.html
.js
.mdCode language: JavaScript (javascript)

path.format(pathObj)

path.format() 方法从指定的 path 对象返回路径字符串。

import path from 'path';

let pathToFile = path.format({
  dir: 'public_html/home/js',
  base: 'app.js',
});

console.log(pathToFile);
Code language: JavaScript (javascript)

输出(在 Linux 或 macOS 上)

public_html/home/js/app.js
Code language: JavaScript (javascript)

path.isAbsolute(path)

如果指定的路径是绝对路径,则 path.isAbsolute() 返回 true

例如,在 Windows 上

import path from 'path';

let result = path.isAbsolute('C:\\node.js\\');
console.log(result); // true

result = path.isAbsolute('C:/node.js/');
console.log(result); // true

result = path.isAbsolute('/node.js');
console.log(result); // true

result = path.isAbsolute('home/');
console.log(result); // false

result = path.isAbsolute('.');
console.log(result); // false
Code language: JavaScript (javascript)

在 Linux & macOS 上

import path from 'path';

let result = path.isAbsolute('/node/js/');
console.log(result); // true

result = path.isAbsolute('/node/..');
console.log(result); // true

result = path.isAbsolute('node/');
console.log(result); // false

result = path.isAbsolute('.');
console.log(result); // falseCode language: JavaScript (javascript)

path.join(…paths)

path.join() 方法有两个作用

  • 使用特定于平台的分隔符作为分隔符连接一系列路径段
  • 规范化结果路径并将其返回。

例如

import path from 'path';

let pathToDir = path.join('/home', 'js', 'dist', 'app.js');
console.log(pathToDir);Code language: JavaScript (javascript)

输出(在 Windows 上)

\home\js\dist\app.jsCode language: JavaScript (javascript)

path.parse(path)

path.parse() 方法返回一个对象,其属性表示路径元素。返回的对象具有以下属性

  • root: 根目录
  • dir: 从根目录开始的目录路径
  • base: 文件名 + 扩展名
  • name: 文件名
  • ext: 扩展名

例如,在 Windows 上

import path from 'path';

let pathObj = path.parse('d:/nodejs/html/js/app.js');
console.log(pathObj);Code language: JavaScript (javascript)

输出

{
    root: 'd:/',
    dir: 'd:/nodejs/html/js/',
    base: 'app.js',
    ext: '.js',
    name: 'app'
}Code language: JavaScript (javascript)

在 Linux 或 macOS 上

import path from 'path';

let pathObj = path.parse('/nodejs/html/js/app.js');
console.log(pathObj);Code language: JavaScript (javascript)

输出

{
    root: '/',
    dir: '/nodejs/html/js',
    base: 'app.js',
    ext: '.js',
    name: 'app'
}Code language: JavaScript (javascript)

path.normalize(path)

path.normalize() 方法规范化指定的路径。它还解析 '..''.' 段。

例如,在 Windows 上

import path from 'path';

let pathToDir = path.normalize('C:\\node.js/module/js//dist');
console.log(pathToDir);
Code language: JavaScript (javascript)

输出

C:\node.js\module\js\distCode language: JavaScript (javascript)

path.relative(from, to)

path.relative() 接受两个参数并返回它们之间的相对路径,该路径基于当前工作目录。

例如,在 Linux 或 macOS 上

import path from 'path';

let relativePath = path.relative('/home/user/config/', '/home/user/js/');
console.log(relativePath);Code language: JavaScript (javascript)

输出

../jsCode language: JavaScript (javascript)

path.resolve(…paths)

path.resolve() 方法接受一系列路径或路径段,并将其解析为绝对路径。path.resolve() 方法从右到左逐个预置每个后续路径,直到完成构建绝对路径。

如果您不向 path.resolve() 方法传递任何参数,它将返回当前工作目录。

例如,在 Linux 或 macOS 上

import { fileURLToPath } from 'url';
import path, { dirname } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

console.log('Current working directory:', __dirname);
console.log(path.resolve());Code language: JavaScript (javascript)

输出

/home/john
/home/johnCode language: JavaScript (javascript)

在这个示例中,path.resolve() 方法返回与当前工作目录相同的路径。

在 Linux 或 macOS 上查看另一个示例

import path from 'path';

// Resolve 2 segments with the current directory
const path1 = path.resolve('html', 'index.html');
console.log(path1);

// Resolve 3 segments with the current directory
const path2 = path.resolve('html', 'js', 'app.js');
console.log(path2);

// Treat of the first segment as root and ignore
// the current working directory
const path3 = path.resolve('/home/html', 'about.html');
console.log(path3);Code language: JavaScript (javascript)

输出

/home/john/html/index.html
/home/john/html/js/app.js
/home/html/about.htmlCode language: JavaScript (javascript)

总结

  • 使用 path 核心模块可以有效地操作文件路径。
  • path 模块是特定于平台的。
本教程对您有帮助吗?