node.js之path模組的使用

Jeffery發表於2019-02-16

path模組包含一系列處理和轉換檔案路徑的工具集,通過 require(`path`) 可用來訪問這個模組。
知識點:對window系統,目錄分隔為“, 對於UNIX系統,分隔符為`/`,針對`..`返回上一級,發現多個斜槓或反斜槓時會替換成一個,/,//,與都被統一轉換為

方法

1、path.resolve([path1], [path2], …)

  按照順序依次拼接,獲取的是絕對路徑,路徑末尾的不會帶有路徑分隔符,若合併後的路徑沒有構成一個絕對路徑,則會預設使用當前工作目錄的絕對路徑。

  // 拼接路徑中沒有帶有絕對路徑
  var _path = path.resolve(`path3`, `path4`, `a/b\cc\`); // 沒有末尾的路徑分隔符
  // 結果為:D:others
odeexamplespath3path4acc
  // 拼接路徑中帶有絕對路徑
  var _path = path.resolve(`D://work/ready/demo`, `path3`, `path4`, `a/b\cc\`);
  // 結果為:D:work
eadydemopath3path4acc

<font color=#f00>注意: 其中的D:othersnodeexamples為我的工作路徑,請對應替換自己的路徑檢視</font>

2、path.join([path1], [path2], …)

  按照順序,依次拼接路徑、並轉為normalize後的結果路徑,路徑末尾的帶有路徑分隔符。

  var _path = path.join(`path1`, `path2\p/cc//`, `/c/../ttt\`);
  // 結果為:path1path2pcc	tt
3、path.relative()

  獲取相對路徑,獲取兩個路徑之間的相對關係。

  • from 當前路徑,並且方法返回值是基於from指定到to的相對路徑,路徑末尾的不帶有路徑分隔符
  • to 到哪路徑

      var from = `D:\work\server\`,
          to = `D:/work/ready/demo`;
      var _path = path.relative(from, to); // 表示從from 到 to的相對路徑
      // 結果為:..
    eadydemo
4、path.isAbsolute()

  獲取絕對路徑,是一個絕對路徑(比如 `E:/abc`或`E:`),或者是以“/”或“”開頭的路徑,二者都會返回true。

  console.log(path.isAbsolute(`D:\work\server\`)); // true
  console.log(path.isAbsolute(`\work\server`)) // true
  console.log(path.isAbsolute(`/temp/../..`)); // true
  console.log(path.isAbsolute(`E:/github/nodeAPI/abc/efg`)); // true
  console.log(path.isAbsolute(`///temp123`)); // true
  console.log(path.isAbsolute(`//temp123`)); // true
5、path.normalize(path)

  路徑解析、得到規範化的格式。

  var _path = path.normalize(__dirname + `//test/a//b/..//c\`);
  // 結果為:D:others
odeexamples	estac
6、path.format(pathObject)

  該方法用於將一個字串型別的路徑轉化為一個路徑物件(pathObject)。該路徑物件當中包括檔案目錄,檔名,副檔名等。

  var _path = path.format(path.format({ root: `E:\`,
    dir: `D:\others\node\examples/test`,
    base: `util you.mp4`,
    ext: `.mp4`,
    name: `util you as me` 
    }
  ));
  // 結果為:D:others
odeexamples/testutil you.mp4
7、path.parse()

  該方法用於將一個路徑物件轉化為一個字串型別的路徑(pathString)。

  var _path = path.parse(__dirname + `/test/util you.mp3`);
  // 結果為:
  // { root: `D:\`,
  //   dir: `D:\others\node\examples/test`,
  //   base: `util you.mp3`,
  //   ext: `.mp3`,
  //   name: `util you` 
  // }
8、path.dirname()

  獲取路徑中目錄結構,不會轉為normalize後的結果路徑。

  var _path = path.dirname(__dirname + `/test/hha/util you.mp3`); // 注意/
  // 結果為:D:others
odeexamples/test/hha 
  var _path = path.dirname(__dirname + `/test/hha/`); // 注意/
  // 結果為:D:others
odeexamples/test
9、path.basename()

  獲取路徑中檔名(.ext則包括字尾名)。

var _path = path.basename(__dirname + `/test/util you.mp3`, `.mp3`);
var _path = path.basename(__dirname + `/test/util you`, `.mp3`);
var _path = path.basename(__dirname + `/test/util you`, `.ext`);
// 結果為:util you
var _path = path.basename(__dirname + `/test/util you.mp3`);
var _path = path.basename(__dirname + `/test/util you.mp3`, ``);
var _path = path.basename(__dirname + `/test/util you.mp3`, `.ext`);
// 結果為:util you.mp3
var _path = path.basename(__dirname + `/test/`, `.mp3`);
// 結果為:test
10、path.extname()

  獲取路徑中檔案字尾名。

  var _path = path.extname(__dirname + `/test/util you.mp3`);
  // 結果為:.mp3
  var _path = path.extname(__dirname + `/test/util you`);
  // 結果為:為空

屬性

1、path.win32和path.posix

  這兩個均為屬性。
  path:會根據當前作業系統來確定是使用windows的方式來操作路徑,還是使用linux的方式來操作路徑。
  path.win32:允許在任意作業系統上使用windows的方式來操作路徑。
  path.posix:允許在任意作業系統上使用linux的方式來操作路徑。
  故在windows系統中,path==path.win32,而在linux系統當中,path==path.posix。

  console.log(path == path.win32); // true
  console.log(path == path.posix); // false
2、path.delimiter

  返回作業系統中目錄分隔符,如window是`;`, Unix中是`:`。

  console.log(path.delimiter);
  // 結果為:;
3、path.sep

  返回作業系統中檔案分隔符; window是“, Unix是`/`。

  console.log(path.sep);
  // 結果為:
  console.log(`foo\bar\baz`.split(path.sep));  
  // [ `foo`, `bar`, `baz` ]
  console.log(`foo/bar/baz`.split(path.sep));  
  // win下返回[`foo/bar/baz`],但在*nix系統下會返回[`foo`,`bar`,`baz`]

參見官方文件

相關文章