【Node.js入门笔记9---path 模块】
Node.js入门笔记9
- Node.js---path 模块
- 一、核心功能
- 0.学习path的前提
- 1. 使用 path.join() 安全拼接路径
- 2. path.resolve(),路径解析(绝对路径)
- 3. 路径信息提取
- 4. 路径规范化
- 二、跨平台关键点
- 1. 路径分隔符
- 2. 环境变量分隔符
- 3. 路径格式解析
- 4. 路径格式重组
- 三、与 __dirname 和 __filename 的关系
- 四、实用场景示例
- 五、总结表
Node.js—path 模块
Node.js 中的 path 模块是处理文件路径的核心工具,专门用于跨平台路径操作。它可以帮助你解决路径拼接、解析、规范化等问题,避免手动处理路径分隔符(/ 或 \)带来的兼容性问题。以下是系统学习指南:
一、核心功能
0.学习path的前提
如果要在 JavaScript 代码中,使用 path模块来操作文件,则需要使用如下的方式先导入它:
const path = require('path');
1. 使用 path.join() 安全拼接路径
语法格式:
const fullPath = path.join('src', 'assets', 'image.jpg');
// Windows: 'src\assets\image.jpg'
// Linux/macOS: 'src/assets/image.jpg'
2. path.resolve(),路径解析(绝对路径)
语法格式:
// 将相对路径解析为绝对路径
const absolutePath = path.resolve('src', 'app.js');
// 假设当前目录是 /home/user/project,则结果为:
// /home/user/project/src/app.js
3. 路径信息提取
语法格式:
const filePath = '/home/user/project/src/app.js';
console.log(path.basename(filePath)); // 'app.js'(文件名)
console.log(path.dirname(filePath)); // '/home/user/project/src'(目录)
console.log(path.extname(filePath)); // '.js'(扩展名)
4. 路径规范化
语法格式:
// 处理冗余的路径符号(如 .. 或 .)
path.normalize('/foo/bar//baz/asdf/..');
// 结果:'/foo/bar/baz'
二、跨平台关键点
1. 路径分隔符
语法格式:
console.log(path.sep); // 输出当前系统的分隔符(Windows 是 `\`,其他是 `/`)
2. 环境变量分隔符
1.fs.open():手动打开文件获取文件描述符。
语法格式:
console.log(path.delimiter); // Windows 是 `;`,其他是 `:`
2.fs.close():关闭文件描述符。
语法格式:
fs.close(fd, callback)
3. 路径格式解析
语法格式:
const parsed = path.parse('/home/user/file.txt');
// 返回:
// {
// root: '/',
// dir: '/home/user',
// base: 'file.txt',
// ext: '.txt',
// name: 'file'
// }
4. 路径格式重组
语法格式:
const obj = { root: '/', name: 'file', ext: '.txt' };
path.format(obj); // '/file.txt'
三、与 __dirname 和 __filename 的关系
语法格式:
__dirname:当前文件所在目录的绝对路径
__filename:当前文件的绝对路径
常见误区:
❌ 错误方式:
const badPath = __dirname + '/../assets/image.jpg'; // 跨平台可能出错
✅ 正确方式:
const goodPath = path.join(__dirname, '..', 'assets', 'image.jpg');
最佳实践:永远用 path.join(__dirname, …) 代替字符串拼接!
四、实用场景示例
场景1:安全读取配置文件
const configPath = path.join(__dirname, 'config', 'settings.json');
const config = require(configPath);
场景2:处理用户上传的文件路径
// 用户可能传入带有 ../ 的路径,使用 normalize 防御
const userInput = '../../secret.txt';
const safePath = path.normalize(path.join(__dirname, 'uploads', userInput));
场景3:动态生成多平台脚本
const scriptPath = path.join(process.cwd(), 'scripts', 'start.sh');
场景4:从一个文件路径中提取文件名(不带扩展名)和父目录
const filePath = '/usr/local/docs/report.pdf';
const parentDir = path.dirname(filePath); // '/usr/local/docs'
const fileName = path.basename(filePath, path.extname(filePath)); // 'report'