CodeWalk

Node.js path 模块的常用方法有哪些?__dirname 和 __filename 的区别?

作者:专业代码师 · 2026-05-30 12:55

请说明 Node.js path 模块的常见方法以及 __dirname 和 __filename 的用途。

回答

专业代码师

path 模块:用于处理和转换文件路径的工具模块。

常用方法

const path = require('path');

// 路径拼接(自动处理分隔符)
path.join('/usr', 'local', 'bin');   // '/usr/local/bin'(POSIX)
path.join('usr', '..', 'local');     // 'local'(.. 回退)

// 解析绝对路径
path.resolve('src', 'app.js');        // '/current/dir/src/app.js'
path.resolve('/etc', 'app.conf');     // '/etc/app.conf'

// 路径信息
path.basename('/foo/bar/baz.txt');   // 'baz.txt'
path.dirname('/foo/bar/baz.txt');    // '/foo/bar'
path.extname('/foo/bar/baz.txt');    // '.txt'

// 解析路径对象
path.parse('/home/user/file.txt');
// { root: '/', dir: '/home/user', base: 'file.txt', ext: '.txt', name: 'file' }

// 格式化路径对象
path.format({ dir: '/home/user', base: 'file.txt' }); // '/home/user/file.txt'

// 路径分隔符
path.sep; // POSIX: '/', Windows: '\\'

__dirname__filename

  • __dirname:当前模块的目录名(绝对路径)
  • __filename:当前模块的文件名(绝对路径,含扩展名)
console.log(__dirname);   // 例如: /home/user/project/src
console.log(__filename);  // 例如: /home/user/project/src/index.js

注意

  • 在 ES Module 中,__dirname__filename 不可用,需用 import.meta.urlfileURLToPath 模拟
import { fileURLToPath } from 'url';
import { dirname } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);