Nodejs Path模块必知必会
近期从事Nodejs服务开发过程中,频繁地使用path模块,特此进行总结。
获取文件路径
-
__dirname 变量获取
当前执行脚本所在的目录的绝对路径__dirname 是一个全局变量,用于表示当前模块的目录名
-
process.cwd() 返回Node.js进程的当前工作目录的绝对路径。
console.log(__dirname);
console.log(process.cwd());
__dirname返回的是当前模块的目录路径,而process.cwd()返回的是Node.js进程的当前工作目录路径。在大多数情况下,它们是相同的,但在一些特殊情况下可能会有不同。
通过代码不同执行路径来对比一下两者的区别
在项目 test 文件夹下创建 path.js
// project/test/path.js
console.log(__dirname);
console.log(process.cwd());
使用 node 执行 path.js, 输出结果如下
$ cd /Users/admin/workspace
$ node ./project/test/path.js
# 输出结果
/Users/admin/workspace/project/test
/Users/admin/workspace
$ cd /Users/admin/workspace/project
$ node ./test/path.js
# 输出结果
/Users/admin/workspace/project/test
/Users/admin/workspace/project
$ cd /Users/admin/workspace/project/test
$ node ./path.js
# 输出结果
/Users/admin/workspace/project/test
/Users/admin/workspace/project/test
对比三个不同路径下使用 node 执行的 js 文件所输出的结果可知
process.cwd() 返回的是Node.js进程的当前工作目录路径 `,即执行 node 命令所在的目录。
__dirname返回的是当前模块的目录路径。无论在哪里执行 node 命令,总会返回当前模块的绝对路径。
拼接路径和解析路径
使用path.join()拼接路径。
const path = require('path');
const fullPath = path.join(__dirname, 'folder', 'file.txt');
console.log(fullPath);
// => /Users/admin/workspace/project/test/folder/file.txt
输出指定文件的绝对路径包含文件及扩展名
const resolvedPath = path.resolve('folder', 'file.txt');
console.log(`解析路径`, resolvedPath);
// => /Users/admin/workspace/project/test/folder/file.txt
解析指定文件输出文件路径
两者之间的区别
path.join() 和 path.resolve() 之间的区别可能需要考虑它们在处理相对路径和绝对路径时的行为
const joinedPath = path.join('/folder', 'file.txt');
// 在类Unix系统上,结果为 '/folder/file.txt'
// 在Windows系统上,结果为 '\folder\file.txt'
const resolvedPath = path.resolve('/folder', 'file.txt');
// 在类Unix系统上,结果为 '/folder/file.txt'
// 在Windows系统上,结果为 'C:\folder\file.txt'(假设当前工作目录为 C:\
- 处理方式:
path.join()只是简单地拼接路径片段,不考虑绝对路径。path.resolve()解析路径并返回绝对路径。
- 基础路径:
path.join()不考虑基础路径,只是简单地将路径片段拼接在一起。path.resolve()的路径解析是基于当前工作目录的,因此返回的是绝对路径。
- 用途:
- 通常,
path.join()用于构建路径,而不考虑其是否是绝对路径。 path.resolve()用于获取一个绝对路径,可以用于构建绝对路径。
- 通常,
路径解析和格式化
**应用场景 **
- 文件操作: 在进行文件读写、复制、移动等操作时,路径解析和格式化有助于获取和处理文件的信息。
- 路由处理: 在Web应用中,路径解析和格式化有助于处理URL路径,提取路由信息。
- 构建工具: 在构建工具、打包工具中,可以使用路径解析和格式化来处理文件路径,确保文件被正确引用和定位。
使用 path.parse() 将路径字符串解析成对象。
const fullPath = path.join(__dirname, 'folder', 'file.txt');
const pathObj = path.parse(fullPath)
console.log(pathObj);
/**
* {
* root: '/',
* dir: '/Users/admin/workspace/project/test/folder',
* base: 'file.txt',
* ext: '.txt',
* name: 'file'
* }
*/
获取路径信息:
使用 path.parse() 将路径字符串解析为一个包含路径信息的对象,其中包括目录、基础名称、扩展名等。
const filePath = '/root/folder/file.txt';
const pathObject = path.parse(filePath);
console.log(pathObject);
// 输出:{ root: '/', dir: '/root/folder', base: 'file.txt', ext: '.txt', name: 'file' }
提取文件信息:
从路径对象中提取所需的信息,如文件名、扩展名等,用于生成文件列表或进行其他操作。
const fileName = pathObject.name;
const fileExtension = pathObject.ext;
使用 path.format 将文件解析成路径字符串
const formattedPath = path.format(pathObj);
console.log(formattedPath);
// /Users/admin/workspace/project/test/folder/file.txt
生成路径字符串:
使用 path.format() 将包含路径信息的对象格式化为路径字符串。
const formattedPath = path.format({
root: '/',
dir: '/root/folder',
base: 'file.txt',
ext: '.txt',
name: 'file'
});
console.log(formattedPath);
// 输出:'/root/folder/file.txt
路径构建
将路径的各个部分以对象的形式组织,然后使用 path.format() 将其格式化为完整的路径。这在构建文件路径时很有用。
const pathObject = {
dir: '/root/folder',
base: 'file.txt'
};
const fullPath = path.format(pathObject);
// fullPath 的值为 '/root/folder/file.txt'
获取路径信息
可以通过 path 的 basename() 、dirname()、extname() 获取路径的基础名称、目录名和扩展名
const baseName = path.basename('/root/folder/file.txt');
const dirName = path.dirname('/root/folder/file.txt');
const extension = path.extname('/root/folder/file.txt');
console.log({baseName, dirName, extension})
// 输出:{ baseName: 'file.txt', dirName: '/root/folder', extension: '.txt' }
路径规范化
使用path.normalize()规范化路径。
const normalizedPath = path.normalize('/root//folder/file.txt');
获取相对路径
使用path.relative()获取两个路径之间的相对路径。
const relativePath = path.relative('/root/folder', '/root/file.txt');
检查路径
使用path.isAbsolute()检查路径是否是绝对路径。
const isAbsolute = path.isAbsolute('/root/folder/file.txt');