Path Module Essentials
Learn to work with file paths correctly in Node.js using the path module. Cross-platform path handling.
Path Module Essentials
The path module handles file paths. Essential for cross-platform code.
Why Use path?
```javascript // ❌ Hardcoded - breaks on Windows const file = '/users/data/' + 'file.txt';
// ✅ Cross-platform const file = path.join('/users/data', 'file.txt'); ```
Import
```javascript const path = require('path'); ```
path.join() - Combine Paths
```javascript path.join('folder', 'subfolder', 'file.txt'); // → 'folder/subfolder/file.txt' (Unix) // → 'folder\\subfolder\\file.txt' (Windows)
path.join(__dirname, 'data', 'config.json'); // → '/app/project/data/config.json' ```
path.resolve() - Absolute Path
```javascript path.resolve('file.txt'); // → '/current/working/directory/file.txt'
path.resolve('/foo', 'bar', 'baz'); // → '/foo/bar/baz'
path.resolve('foo', '/bar', 'baz'); // → '/bar/baz' (starts fresh from /bar) ```
path.basename() - File Name
```javascript path.basename('/path/to/file.txt'); // → 'file.txt'
path.basename('/path/to/file.txt', '.txt'); // → 'file' (without extension) ```
path.dirname() - Directory
```javascript path.dirname('/path/to/file.txt'); // → '/path/to' ```
path.extname() - Extension
```javascript path.extname('file.txt'); // → '.txt' path.extname('file.tar.gz'); // → '.gz' path.extname('file'); // → '' ```
path.parse() - Break Down Path
```javascript path.parse('/home/user/file.txt'); // { // root: '/', // dir: '/home/user', // base: 'file.txt', // ext: '.txt', // name: 'file' // } ```
path.format() - Build Path
```javascript path.format({ dir: '/home/user', name: 'file', ext: '.txt' }); // → '/home/user/file.txt' ```
__dirname and __filename
```javascript // Current file's directory console.log(__dirname); // '/app/project/src'
// Current file's full path console.log(__filename); // '/app/project/src/app.js'
// Common pattern const dataPath = path.join(__dirname, '..', 'data', 'config.json'); ```
Practical Example
```javascript const path = require('path'); const fs = require('fs').promises;
async function processFiles(directory) { const files = await fs.readdir(directory); for (const file of files) { const fullPath = path.join(directory, file); const ext = path.extname(file); if (ext === '.txt') { console.log(`Processing: ${path.basename(file)}`); // Process file... } } }
processFiles(path.join(__dirname, 'data')); ```
Key Takeaway
Always use `path.join()` to combine paths - never concatenate strings. Use `__dirname` for paths relative to your file. The path module ensures your code works on any operating system.