node path模块

时间:2021-08-10 13:07:28

一、在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写一遍,加上自己的理解,大概就清楚了。

祝大家端午节快乐。