無處不在的 path 模塊

path究竟是什麼鬼? 爲啥老看見它

雖然我不寫node.js,可是總能在各類配置文件(gulpfile.js/webpack.config.js)中看到這段代碼,還有好多配置工具的例子中也老是用到它,因此讓咱們來一塊兒解讀一下這段代碼中蘊含的全部知識點吧javascript

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對外暴露的接口html

path中一些經常使用的方法總結

1.path.basename(path[, ext])
獲取路徑中文件名,後綴是可選的,若是加請使用'.xxx'方式來匹配,則返回值中不包括後綴名;java

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統稱)的例子node

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)
獲取路徑中目錄名python

var myPath = path.dirname(__dirname + '/test/util/you.mp3');
console.log(myPath);

//Users/cayley/Documents/webpack-demo/test/util複製代碼

__dirname是node.js中的一個全局變量,用來獲取當前模塊文件所在目錄的完整絕對路徑linux

4.path.extname(path)
獲取路徑中的擴展名,若是沒有'.',則返回空webpack

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系統,分隔符爲'/',針對'..'返回上一級;/與\\都被統一轉換web

//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)
獲取兩路徑之間的相對關係gulp

  • 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 一個不斷努力學習的女程序員

相關文章
相關標籤/搜索