摘要: 在本教程中,您将了解 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模块是特定于平台的。