跳至主要内容

[node] Path Module

const path = require('path');

path.resolve(); // 取得當前資料夾的絕對路徑
path.resolve(__dirname, 'folderName');

path.resolve 和 path.join 的差別

keywords: path.resolve, path.join
/**
* join 是單純把指定的路徑連結在一起
* resolve 會把最後一個帶有 '/' 的路徑當作根目錄,類似 "cd" 的效果
**/

const join = path.join(__dirname, '/a', '/b', 'c'); // directory_path/src/a/b/c
const resolve = path.resolve(__dirname, '/a', '/b', 'c'); // /b/c

path.basename 取的檔案名稱

keywords: path.basename, path.extname, path.parse
const filePath = '/foo/bar/baz/asdf/quux.html';

// 取得檔案和副檔名
path.basename(filePath); // quux.html

// 只要檔案名稱不要附檔名
const extension = path.extname(filePath);
const name = path.basename(filePath, extension); // quux

// 取得詳細的檔案路徑、名稱、副檔名
path.parse(filePath);
// {
// root: '/',
// dir: '/foo/bar/baz/asdf',
// base: 'quux.html',
// ext: '.html',
// name: 'quux'
// }

其他

取得檔案路徑

keywords: __dirname, __filename, process.cwd(), ./
  • __dirname:獲得當前被執行檔案所在的資料夾路徑
  • __filename:獲得當前被執行檔案所在的檔案路徑
  • process.cwd():獲得當前執行 node 指令時候的檔案夾目錄名
  • ./: 不使用 require 時候,./process.cwd() 一樣,使用 require 時候,與 __dirname 一樣

舉例來說,當我在 $HOME/Projects 資料夾中執行 node ./scripts/foo.js 時,分別會得到:

__dirname: /Users/pjchen/Projects/scripts          # 被執行檔案所在的資料夾路經
__filename: /Users/pjchen/Projects/scripts/foo.js # 被執行檔案所在的檔案路徑
process.cwd(): /Users/pjchen/Projects # 在 Terminal 中執行 node 指令的路徑

foo.js 中的內容:

// ./Projects/scripts/foo.js
console.log('__dirname', __dirname);
console.log('__filename', __filename);
console.log('process.cwd()', process.cwd());

[What's the difference between process.cwd() vs __dirname?] @ StackOverflow