node.js path相關方法


在搭建ES6環境需要自己寫gulpfile.js配置時,發現里面用到了node.js中的一部分內容——path。
配置中有這樣一行代碼:
 
const from = path.join(_dirname, './appes6/js');   //d:/Users/xxchi/Desktop/ES6/appes6/js
 
這是什么意思呢?
1、const ES6語法聲明一個不可以改變的只讀常量from。
2、path.join 是node.js中用path模塊連接路徑,即鏈接 _dirname 和 ./appes6/js
3、_dirname 在node.js中會返回該文件所在文件夾的位置,即gulpfile.js所在文件夾的位置(d:/Users/xxchi/Desktop/ES6)
拼接后就得到了d:/Users/xxchi/Desktop/ES6/appes6/js這個結果。
 
注意:使用path模塊前必須先引入該模塊
import path from 'path'
 
Node.js v7.5.0  path模塊功能介紹(以下demo均來自官網),個人認為比較常用的兩個方法join和normalize已標紅
path模塊提供了關於文件和文件目錄的一些用法,引入path模塊即可。
 
//引入path模塊
const path = require('path');
 
path操作的返回結果會因操作系統的不同而有所不同。例如:
 
path.basename('C:\\temp\\myfile.html');
//POSIX系統下,返回:'C:\\temp\\myfile.html'
//windows系統下,返回:'myfile.html'
 
為了得到一致的結果可以使用path.win32 
插入十三、path.win32  提供windows下,下述方法的訪問.
 
path.win32.basename('C:\\temp\\myfile.html');     //兩個系統下均返回 'myfile.html'
 
注:Windows下斜杠(/)和反斜杠(\)都是允許作為路徑分隔符的,但是返回值中只有反斜杠(\)
 
一、path.basename(path[, ext]),類似UNIX系統下的basename命令,返回文件名
  • path 字符串,路徑
  • ext 字符串,擴展名     如果path和ext不是字符串的形式會拋出TypeError的錯誤
  • 返回值以字符串的形式
 
path.basename('/foo/bar/baz/asdf/quux.html')     //'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html')     //'quux'
 
二、path.delimiter  提供不同系統下的分隔符。windows系統(;)和posix(:)系統分隔符不同
 
POSIX下:
console.log(process.env.PATH);
//'usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'
 
process.env.PATH.split(path.delimiter)
//['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']
 
Window下:
 
console.log(process.env.PATH)
//'C:\Windows\system32;C:\Windows;C:\Program Files\node\'
 
process.env.PATH.split(path.delimiter)
//['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']
 
插入十二、path.sep 返回各平台的分隔符(Windows\,POSIX/)
POSIX下:
 
'foo/bar/baz'.split(path.sep);
//返回:['foo','bar','baz']
 
Windows下:
 
'foo\\bar\\baz'.split(path.sep)
//返回:['foo','bar','baz']
 
 
三、path.dirname(path)     返回文件所在路徑名
 
path.dirname('/foo/bar/baz/asdf/quux');
//'/foo/bar/baz/asdf/'
 
四、path.extname(path)     返回拓展名。按照出現的最后一個點來划分,如果沒有.或者路徑是以.開頭的就返回一個空字符串,如果最后一個剛好是.就返回.
 
path.extname('index.html')           //'.html'
path.extname('index.coffee.md')      //'.md'
path.extname('index.')               //'.'
path.extname('index')                //''
path.extname('.index')               //''
 
五、path.format(pathObject)     將對象形式的路徑轉為字符串形式的,與path.parse()相反
  • pathObject     對象 包括:dir, root, base, name, ext
這幾種屬性有優先級需要注意:
  • 有dir忽略root
  • 有base忽略name和ext
POSIX:
 
//1、dir, root, base都提供了,忽略root,返回dir和base拼出的路徑
path.format({
     root: '/ignored',
     dir:  '/home/user/dir',
     base: 'file.txt'
})
//返回: /home/user/dir/file.txt
 
//2、沒有dir有root,則用root。如果只提供了root或者root等於dir則忽略拓展名
path.format({
  root: '/',
  base: 'file.txt',
  ext: 'ignored'
})
//返回 '/file.txt'
 
//3、如果沒有base,返回root+name+ext
path.format({
  root: '/',
  name: 'file',
  ext: '.txt'
})
//返回 '/file.txt'
 
Windows:
 
path.format({
     dir : "C:\\path\\dir",
     base : "file.txt"
});
//返回 'C:\\path\\dir\\file.txt'
 
五、path.isAbsolute(path)     判斷是否是絕對路徑,返回布爾值
 
POSIX:
 
path.isAbsolute('/foo/bar') // true
path.isAbsolute('/baz/..')  // true
path.isAbsolute('qux/')    // false
path.isAbsolute('.')        // false
 
Windows:
 
path.isAbsolute('//server') // true
path.isAbsolute('\\\\server') // true
path.isAbsolute('C:/foo/..') // true
path.isAbsolute('C:\\foo\\..') // true
path.isAbsolute('bar\\baz') // false
path.isAbsolute('bar/baz') // false
path.isAbsolute('.') // false
 
六、path.normalize(path)     路徑格式化
1、規范..和.   ..及..前的那個和后面的所有都會被去掉 
2、//和\\ 在POSIX中 //規范成/ ;在Windows中\\不變,,\\\\會被規范成\\
 
POSIX:
 
path.normalize('/foo/bar//baz/asdf/quux/..')
//返回 '/foo/bar/baz/asdf'
 
Windows中:
 
path.normalize('C:\\temp\\\\foo\\bar\\..\\')
//返回 'C:\\temp\\foo\\'
 
 
七、path.join([...paths]) 連接路徑,會自動對連接好的路徑格式化
如果字符串長度是0,則會返回.代表當前工作路徑
 
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')
//返回 '/foo/bar/baz/asdf'
 
path.join('foo', {}, 'bar')
//拋出TypeError錯誤,參數必須是字符串,不能是對象等其他的
 
八、path.parse(path)  將字符串格式的轉化為對象格式的,是path.format(pathObject)的逆過程。
POSIX:
 
path.parse('/home/user/dir/file.txt')
//返回
//{
//   root: '/',
//   dir: '/home/user/dir',
//   base: 'file.txt',
//   ext: '.txt',
//   name: 'file'
//}
 
感覺下圖更加形象,很好理解
┌─────────────────────┬────────────┐
│          dir        │    base    │
├──────┬              ├──────┬─────┤
│ root │              │ name │ ext │
"  /    home/user/dir / file  .txt "
└──────┴──────────────┴──────┴─────┘
 
Windows:
 
path.parse('C:\\path\\dir\\file.txt')
//返回
// {
//    root : "C:\\",
//    dir : "C:\\path\\dir",
//    base : "file.txt",
//    ext : ".txt",
//    name : "file"
// }
 
┌─────────────────────┬────────────┐
│          dir        │    base    │
├──────┬              ├──────┬─────┤
│ root │              │ name │ ext │
" C:\     path\dir    \ file  .txt "
└──────┴──────────────┴──────┴─────┘
 
九、path.posix  是path方法的一個特殊應用,提通過path.posix訪問POSIX
 
十、path.relative(from, to)     提取from和to的公共部分,將to解析為相對路徑,如果from和to一樣,返回空字符串。
POSIX:
 
path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb')
//返回  '../../impl/bbb'
 
Windows:
 
path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb')
//返回 '..\\..\\impl\\bbb'
 
寫吐了,不想寫了
十一、path.resolve([...paths]) 將最后一個參數轉成絕對路徑,從右往左,依次在前面加上路徑,知道一個絕對路徑構成就不再在前面加了。返回的路徑是規范化以后的,空的路徑參數會被忽略,如果沒傳參數,返回當前工作路徑。如果所有參數都用上了還沒返回絕對路徑,就要加上當前的工作路徑。
 
path.resolve('/foo', '/bar' ,'baz');               //返回:'/bar/baz'
path.resolve('/foo/bar','/tmp/file/');             //返回: '/tmp/file'     結尾/被刪除了
path.resolve('/foo/bar', './baz');                 //返回: '/foo/bar/baz'
path.resolve('wwroot','static_files/png/','../gif/image.gif')     //如果當前的工作目錄是 /home/myself/node 返回: '/home/myself/node/wwwroot/static_files/image.gif'
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM