無處不在的 path 模組

cayley的程式設計之路發表於2017-04-25

path到底是什麼鬼? 為啥老看見它

雖然我不寫node.js,但是總能在各種配置檔案(gulpfile.js/webpack.config.js)中看到這段程式碼,還有好多配置工具的例子中也總是用到它,所以讓我們來一起解讀一下這段程式碼中蘊含的所有知識點吧

var path = require('path');
複製程式碼
  • 首先所有用到這段程式碼的檔案都是node.js的一個模組檔案
  • Node應用由模組組成,採用CommonJS模組規範,path就是其中的一個應用模組,path模組提供了一些用於處理檔案路徑的小工具
  • 內建的require命令用於載入模組檔案
  • require命令的基本功能是,讀入並執行一個JavaScript檔案,然後返回該模組的exports物件
  • require命令用於載入檔案,字尾名預設為.js
var path = require('path');
//等同於var path = require('path.js');
複製程式碼
  • 根據引數的不同格式,require命令去不同路徑尋找模組檔案

怎麼樣沒想到吧,一行程式碼裡面竟然蘊含著這麼多資訊和知識,所以path是node中node_modules目錄的已安裝模組,在我們的檔案中可以按照上述方式載入使用path對外暴露的介面

path中一些常用的方法總結

1.path.basename(path[, ext])
獲取路徑中檔名,字尾是可選的,如果加請使用'
.xxx'
方式來匹配,則返回值中不包括字尾名;

path.basename('/foo/bar/baz/asdf/quux.html')// Returns: 'quux.html'path.basename('/foo/bar/baz/asdf/quux.html', '.html')// Returns: 'quux'複製程式碼

2.path.delimiter
返回作業系統中目錄分隔符,如window是'
;
'
, Unix,linux,mac os中是'
:'
,下面舉一個POSIX(除了Windows統稱)的例子

console.log(process.env.PATH)// Prints: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'process.env.PATH.split(path.delimiter)// Returns: ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']複製程式碼

3.path.dirname(path)
獲取路徑中目錄名

var myPath = path.dirname(__dirname + '/test/util/you.mp3');
console.log(myPath);
//Users/cayley/Documents/webpack-demo/test/util複製程式碼

__dirname是node.js中的一個全域性變數,用來獲取當前模組檔案所在目錄的完整絕對路徑

4.path.extname(path)
獲取路徑中的副檔名,如果沒有'
.'
,則返回空

path.extname('index.html')// Returns: '.html'path.extname('index.coffee.md')// Returns: '.md'path.extname('index.')// Returns: '.'path.extname('index')// Returns: ''path.extname('.index')// Returns: ''複製程式碼

5.path.join([…paths])
路徑結合、合併,路徑最後不會帶目錄分隔符

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')// Returns: '/foo/bar/baz/asdf'path.join('foo', {
}, 'bar')// throws TypeError: Arguments to path.join must be strings複製程式碼

6.path.normalize(path)
路徑解析,得到規範化的路徑格式,對window系統,目錄分隔為'
\'
, 對於UNIX系統,分隔符為'
/'
,針對'
..'
返回上一級;/與\\都被統一轉換

//For example on POSIX:path.normalize('/foo/bar//baz/asdf/quux/..')// Returns: '/foo/bar/baz/asdf'//On Windows:path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// Returns: 'C:\\temp\\foo\\'複製程式碼

7.path.relative(from, to)
獲取兩路徑之間的相對關係

  • from 當前路徑,並且方法返回值是基於from指定到to的相對路徑
  • to 到哪路徑
path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb')// Returns: '../../impl/bbb'複製程式碼

8.path.resolve([…paths])
以應用程式為起點,根據引數字串解析出一個絕對路徑

var myPath = path.resolve('path1' + '/dist/bundle.js');
console.log(myPath);
//Users/cayley/Documents/webpack-demo/path1/dist/bundle.js複製程式碼

9.path.sep
返回作業系統中檔案分隔符; window是'
\\'
, Unix是'
/'

寫在最後的總結

其實本文也算是給自己的一個筆記,翻譯了node.js官網的關於path的文件,翻譯不全,只為了方便隨時翻閱那些方法的使用和方法的功能,還有就是給對初次使用和見到path模組的人的一個指導,讓我們多多學習和記錄總結

Cayley 一個不斷努力學習的女程式設計師

來源:https://juejin.im/post/58feb88d1b69e60058a89736

相關文章