一、在nodejs中path模塊時使用頻率很高的模塊,其中不乏有很多API寫得很模糊,但仔細琢磨下來,也不是很難理解。 1.獲取文件所在路徑 2.獲取路徑中的最後一部分 3.獲取文件的拓展名 二、組合路徑 1. 路徑的拼接 path.join(); 2.path.resove(from,to);將t ...
一、在nodejs中path模塊時使用頻率很高的模塊,其中不乏有很多API寫得很模糊,但仔細琢磨下來,也不是很難理解。
1.獲取文件所在路徑
var path = require('path'); var test = '/test/test1/test2/test.js'; //獲取文件所在的目錄 console.log(path.dirname(test)); // /test/test1/test2
2.獲取路徑中的最後一部分
var path = require('path'); var test = '/test/test1/test2/test.js'; var test1 = '/test/test1/test2/'; var test2 = '/test/test1/test2'; //獲取路徑中的最後一部分 大部分時間可以用來判斷文件名 console.log(path.basename(test)); //test.js console.log(path.basename(test1)); // test2 console.log(path.basename(test2));//test2
3.獲取文件的拓展名
var path = require('path'); var test = '/test/test1/test2/test.js'; var file1 = '.js'; var file2 = 'js.'; //獲取文件的拓展名 其實是從最後一個 '.'開始截取的。特別需要註意的是 //如果 '.'開頭 則返回 空 , 點結尾返回 '.' console.log(path.extname(test)); //.js console.log(path.extname(file1)); // '' console.log(path.extname(file2)); //'.'
二、組合路徑
1. 路徑的拼接 path.join();
var path = require('path'); var test = '/test/'; var test1 = '/test1/'; var test2 = '/test2/'; console.log(path.join(test,test1,test2)); // '\test\test1\test2'; // 為什麼會輸出這個呢 ? 其實是把 path 拼接起來在normalize一下
2.path.resove(from,to);將to 解析為絕對路徑
var path = require('path'); console.log(path.resolve('path.js')) //\express\path.js
3.path.parse();路徑的解析
var path = require('path'); //路徑的解析 console.log(path.parse('path.js')) //{ root: '', dir: '', base: 'path.js', ext: '.js', name: 'path' }
三、規範路徑 path.normalize();
- 如果路徑為空,返回
.
,相當於當前的工作路徑。 - 將對路徑中重覆的路徑分隔符(比如linux下的
/
)合併為一個。 - 對路徑中的
.
、..
進行處理。(類似於shell里的cd ..
) - 如果路徑最後有
/
,那麼保留該/
var path = require('path'); var filepath = '/tmp/demo/js/test.js'; var index = 0; var compare = function(desc, callback){ console.log('[用例%d]:%s', ++index, desc); callback(); console.log('\n'); }; compare('路徑為空', function(){ // 輸出 . console.log( path.normalize('') ); }); compare('路徑結尾是否帶/', function(){ // 輸出 /tmp/demo/js/upload console.log( path.normalize('/tmp/demo/js/upload') ); // /tmp/demo/js/upload/ console.log( path.normalize('/tmp/demo/js/upload/') ); }); compare('重覆的/', function(){ // 輸出 /tmp/demo/js console.log( path.normalize('/tmp/demo//js') ); }); compare('路徑帶..', function(){ // 輸出 /tmp/demo/js console.log( path.normalize('/tmp/demo/js/upload/..') ); }); compare('相對路徑', function(){ // 輸出 demo/js/upload/ console.log( path.normalize('./demo/js/upload/') ); // 輸出 demo/js/upload/ console.log( path.normalize('demo/js/upload/') ); }); compare('不常用邊界', function(){ // 輸出 .. console.log( path.normalize('./..') ); // 輸出 .. console.log( path.normalize('..') ); // 輸出 ../ console.log( path.normalize('../') ); // 輸出 / console.log( path.normalize('/../') ); // 輸出 / console.log( path.normalize('/..') ); });
四、其中不乏有些沒有說清楚,按照API寫一遍,加上自己的理解,大概就清楚了。
祝大家端午節快樂。