NodeJS之path模組
常用的主要有如下工具函式:
1. path.basename(path[, ext])
2. path.extname(path)
3. path.dirname(path)
4. path.parse(path)
5. path.format(pathObject)
6. path.isAbsolute(path);
7. path.join([...paths])
8. path.relative(from, to)
9. path.resolve([from...], to);
一:path.basename(path[, ext])
引數解析如下:
path: <string>
ext: <string> 可選的副檔名
返回:<string>
path.basename(filepath), 是獲取路徑的最後一部分。 可以看看如下程式碼:
const path = require('path'); console.log(path.basename("/node/base/path/xx/js/index.js")); // 最後輸出 index.js console.log(path.basename("/node/base/path/xx/js")); // 輸出js console.log(path.basename("/node/base/path/xx/js/")); // js/ 帶反斜槓,也一樣輸出js
1.1 獲取檔名
如果只想獲取檔名,不需要副檔名則可以使用第二個引數,第二個引數可以指定檔案的副檔名;如下程式碼:
const path = require('path'); console.log(path.basename("/node/base/path/xx/js/index.js", '.js')); // 最後輸出 index
二:path.extname(path)
該方法返回path的副檔名,即從path的最後一部分中的最後一個.(句號)字元到字串結束。如果path的最後一部分沒有 . 或 path的檔名的第一個
字元是 . ,則返回一個空字串。如下程式碼:
const path = require('path'); console.log(path.extname('index.html')); // .html console.log(path.extname('index.coffee.md')); // .md console.log(path.extname('index.')); // 返回 . console.log(path.extname('index')); // 返回 '' console.log(path.extname('.index')); // 返回 ''
如果path不是一個字串,則丟擲 TypeError; 如下:
console.log(path.extname(111)); // 丟擲異常
三:path.dirname(path)
該方法返回一個path的目錄名。如下程式碼:
const path = require('path'); const filepath = '/node/base/path/index.js'; console.log(path.dirname(filepath)); // 輸出 /node/base/path
四:path.parse(path)
path.parse()方法返回一個物件,物件的屬性表示path的元素。如下程式碼:
const path = require('path'); const filepath = '/node/base/path/index.js'; console.log(path.parse(filepath)); // 輸出如下: /* { root: '/', dir: '/node/base/path', base: 'index.js', ext: '.js', name: 'index' } */
五:path.format(pathObject)
該方法會從一個物件返回一個路徑字串,與pase.parse()相反。
當pathObject提供的屬性有組合時,有些屬性的優先順序比其他的高;
1. 如果提供了pathObject.dir,則pathObject.root 會被忽略。
2. 如果提供了 pathObject.base存在,則pathObject.ext 和 pathObject.name 會被忽略;
如下程式碼:
const path = require('path'); // 如果提供了pathObject.dir,則pathObject.root 會被忽略。 const str = { root: '/ignored', dir: '/node/base/path', base: 'index.js', ext: '.js', name: 'index' }; console.log(path.format(str)); // 輸出 /node/base/path/index.js // 如果沒有提供了pathObject.dir,則pathObject.root 會使用。 const str2 = { root: '/', base: 'index.js', ext: '.js', name: 'index' }; console.log(path.format(str2)); // 輸出 /index.js // 如果沒有指定 'base', 則 'name' + 'ext' 會被使用 const str3 = { root: '/', ext: '.js', name: 'index' }; console.log(path.format(str3)); // 輸出 /index.js
六:path.isAbsolute(path);
該方法會判定path是否為一個絕對路徑。如果給定的path是一個長度為零的字串,則返回false. 如下程式碼:
const path = require('path'); console.log(path.isAbsolute('/xxx/yy')); // true console.log(path.isAbsolute('/xxx/')); // true console.log(path.isAbsolute('xxxx/')); // false console.log(path.isAbsolute('.')); // false
七:path.join([...paths])
該方法使用特定的分隔符把全部給定的path片段連結到一起,並規範生成的路徑。
如下程式碼:
const path = require('path'); console.log(path.join('/node', 'www', 'local', 'html', '')); // 輸出 /node/www/local/html console.log(path.join('node', 11122, 'www')); // 會報錯,TypeError: Path must be a string. Received 11122
八:path.relative(from, to)
該方法返回從 from 到 to的相對路徑(基於當前工作目錄)。
如下程式碼:
const path = require('path'); console.log(path.relative('/data/xx/text/aa', '/data/xx/yyyy/bbb')); // 輸出 ../../yyyy/bbb
九:path.resolve([from...], to);
將to分解成一個絕對路徑。
如果to不是一個絕對路徑的話,那麼from會被優先考慮,直到找到一個絕對路徑,如果在form內還沒有找到絕對路徑,就會使用當前的工作目錄。
當然如果 to 是一個絕對路徑的話,那麼直接返回該絕對路徑。
如下程式碼:
const path = require('path'); // to 不是一個絕對路徑,form優先被考慮,直到找到一個絕對路徑 console.log(path.resolve('/foo/bar', './baz')); // 返回 /foo/bar/baz // to 是一個絕對路徑,那麼久直接返回 to console.log(path.resolve('/foo/bar', '/baz')); // 返回 /baz // 如果 from 和 to 都不是一個絕對路徑的話,就會使用當前的工作目錄 + form + to console.log(path.resolve('foo', 'bar')); // 返回 /Users/tugenhua/個人demo/node0420/nodeUrl/foo/bar