path.join():方法使用平臺特定的分隔符[Unix系統是/,Windows系統是\ ]把所有給定的 path 片斷鏈接到一塊兒,並規範化生成的路徑。若任意一個路徑片斷類型錯誤,會報錯。 例如:bash
__dirname
// __dirname返回當前文件所在的絕對路徑
const path = require('path');
const path1 = path.join(__dirname, '/foo');
const path2 = path.join(__dirname, './foo/bar');
const path3 = path.join('/foo', 'bar', '/baz/apple', 'aaa', '..');
const path4 = path.join('foo', 'bar', 'baz');
console.log(path1);
console.log(path2);
console.log(path3);
console.log(path4);
// 輸出結果
/Users/xiao/work/test/foo
/Users/xiao/work/test/foo/bar
/foo/bar/baz/apple
foo/bar/baz
複製代碼
不合法的字符串將拋出異常app
const path5 = path.join('foo', {}, 'bar');
// TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type object
複製代碼
若是鏈接後的路徑字符串是一個長度爲零的字符串,則返回 '.',表示當前工做目錄。ui
path.join('foo', 'bar', '..', '..')
// 返回結果爲
'.'
複製代碼
path.resolve:方法會把一個路徑或路徑片斷的序列解析爲一個絕對路徑。 例如:spa
const path = require('path');
const path1 = path.resolve('/a/b', '/c/d');
// 結果: /c/d
const path2 = path.resolve('/a/b', 'c/d');
// 輸出: /a/b/c/d
const path3 = path.resolve('/a/b', '../c/d');
// 輸出: /a/c/d
const path4 = path.resolve('a', 'b');
// 輸出: /Users/xiao/work/test/a/b
複製代碼
resolve把‘/’當成根目錄 path.resolve()方法能夠將多個路徑解析爲一個規範化的絕對路徑。其處理方式相似於對這些路徑逐一進行cd操做,與cd操做不一樣的是,這引發路徑能夠是文件,而且可沒必要實際存在(resolve()方法不會利用底層的文件系統判斷路徑是否存在,而只是進行路徑字符串操做);code
path.resolve('www', 'static', '../public', 'src', '..');
// cd www /Users/xiao/work/test/www
// cd static /Users/xiao/work/test/www/static
// cd ../public /Users/xiao/work/test/www/public
// cd src /Users/xiao/work/test/www/public/src
// cd .. /Users/xiao/work/test/www/public
複製代碼
resolve操做至關於進行了一系列的cd操做,字符串
一、join是把各個path片斷鏈接在一塊兒, resolve把‘/’當成根目錄string
path.join('/a', '/b');
// /a/b
path.resolve('/a', '/b');
// /b
複製代碼
二、resolve在傳入非/路徑時,會自動加上當前目錄造成一個絕對路徑,而join僅僅用於路徑拼接console
// 當前路徑爲
/Users/xiao/work/test
path.join('a', 'b', '..', 'd');
// a/d
path.resolve('a', 'b', '..', 'd');
// /Users/xiao/work/test/a/d
複製代碼
能夠看出resolve在傳入的第一參數爲非根路徑時,會返回一個帶當前目錄路徑的絕對路徑。class