• 06 【nodejs内置模块(中)】


    06 【nodejs内置模块(中)】

    1.路劲处理模块 path

    1.1 模块概览

    在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块。部分因为文档说的不够清晰,部分因为接口的平台差异性。

    将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了。

    1.2 获取路径/文件名/扩展名

    • 获取路径:path.dirname(filepath)
    • 获取文件名:path.basename(filepath)
    • 获取扩展名:path.extname(filepath)
    1.2.1 获取所在路径

    例子如下:

    var path = require('path');
    var filepath = '/tmp/demo/js/test.js';
    
    // 输出:/tmp/demo/js
    console.log( path.dirname(filepath) );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1.2.2 获取文件名

    严格意义上来说,path.basename(filepath) 只是输出路径的最后一部分,并不会判断是否文件名。

    但大部分时候,我们可以用它来作为简易的“获取文件名“的方法。

    var path = require('path');
    
    // 输出:test.js
    console.log( path.basename('/tmp/demo/js/test.js') );
    
    // 输出:test
    console.log( path.basename('/tmp/demo/js/test/') );
    
    // 输出:test
    console.log( path.basename('/tmp/demo/js/test') );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    如果只想获取文件名,单不包括文件扩展呢?可以用上第二个参数。

    // 输出:test
    console.log( path.basename('/tmp/demo/js/test.js', '.js') );
    
    • 1
    • 2
    1.2.3 获取文件扩展名

    简单的例子如下:

    var path = require('path');
    var filepath = '/tmp/demo/js/test.js';
    
    // 输出:.js
    console.log( path.extname(filepath) );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    更详细的规则是如下:(假设 path.basename(filepath) === B )

    • 从B的最后一个.开始截取,直到最后一个字符。
    • 如果B中不存在.,或者B的第一个字符就是.,那么返回空字符串。

    直接看官方文档的例子

    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 ''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1.3 路径组合

    • path.join([…paths])
    • path.resolve([…paths])
    1.3.1 path.resolve() 生成完成的绝对路径

    语法格式:

    path.resolve([...myPaths])
    
    • 1

    解释:

    • 将路径或路径片段的序列解析为绝对路径。
    • 返回的路径是从右往左处理,后面的每个 myPath 被依次解析,直到构造出一个完整的绝对路径。

    你可以想象现在你在shell下面,从左到右运行一遍cd path命令,最终获取的绝对路径/文件名,就是这个接口所返回的结果了。

    代码举例:

    const path = require('path');
    
    let arr1 = ['/foo1/foo2', 'dselegent', 'foo3'];
    let result1 = path.resolve(...arr1);
    console.log(result1); // 打印结果:/foo1/foo2/dselegent/foo3
    
    let arr2 = ['/foo1/foo2', '/dselegent', 'foo3'];
    let result2 = path.resolve(...arr2);
    console.log(result2); // 打印结果:/dselegent/foo3
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    const path = require('path');
    
    // 假设当前工作路径是 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path
    
    // 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path
    console.log( path.resolve('') )
    
    // 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path
    console.log( path.resolve('.') )
    
    // 输出 /foo/bar/baz
    console.log( path.resolve('/foo/bar', './baz') );
    
    // 输出 /foo/bar/baz
    console.log( path.resolve('/foo/bar', './baz/') );
    
    // 输出 /tmp/file
    console.log( path.resolve('/foo/bar', '/tmp/file/') );
    
    // 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path/www/js/mod.js
    console.log( path.resolve('www', 'js/upload', '../mod.js') );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    1.3.2 path.join() 将多个路径进行拼接

    如果是我们手动拼接路径,容易出错。这个时候,可以利用 path.join() 方法将路径进行拼接。

    语法格式:

    path.join([...paths]);
    
    • 1

    解释:使用平台特定的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。

    代码举例:

    const path = require('path');
    
    const result1 = path.join(__dirname, './app.js');
    console.log(result1); // 返回:/Users/smyhvae/dselegent/app.js
    
    const result2 = path.join('/foo1', 'foo2', './foo3');
    console.log(result2); // 返回:/foo1/foo2/foo3
    
    const result3 = path.join('/foo1', 'foo2', '/foo3');
    console.log(result3); // 返回:/foo1/foo2/foo3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1.3.3 path.resolve 和 path.join 区别

    path.resolve 和 path.join 都是属于 path 核心模块下的方法,用来拼接路径。

    都可以拼接成一个完整路径.

    const path = require("path");
    
    var dirname = '/User/Desktop';
    var basename 
    • 1
    • 2
    • 3
  • 相关阅读:
    Nebula Graph + Plato调研总结
    修改51单片机中数组元素的值
    【UML类图之C++】
    输入一组学生信息并保存到文件中。学生信息包括学号,姓名,5门课的分数。 要求使用结构体数组做函数参数编程。
    [Typescript]基础篇之元组
    Taro编译警告解决方案:Error: chunk common [mini-css-extract-plugin]
    mybatis-plus update详解
    【大数据开发】FineReport报表基础入门
    MDK自动生成带校验带SVN版本号的升级文件
    LA@二次型@标准化相关原理和方法
  • 原文地址:https://blog.csdn.net/DSelegent/article/details/127819468