无处不在的 path 模块

2,622 阅读3分钟

path到底是什么鬼? 为啥老看见它

虽然我不写node.js,但是总能在各种配置文件(gulpfile.js/webpack.config.js)中看到这段代码,还有好多配置工具的例子中也总是用到它,所以让我们来一起解读一下这段代码中蕴含的所有知识点吧

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

path中一些常用的方法总结

1.path.basename(path[, ext])
获取路径中文件名,后缀是可选的,如果加请使用'.xxx'方式来匹配,则返回值中不包括后缀名;

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统称)的例子

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)
获取路径中目录名

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

//Users/cayley/Documents/webpack-demo/test/util

__dirname是node.js中的一个全局变量,用来获取当前模块文件所在目录的完整绝对路径

4.path.extname(path)
获取路径中的扩展名,如果没有'.',则返回空

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系统,分隔符为'/',针对'..'返回上一级;/与\\都被统一转换

//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)
获取两路径之间的相对关系

  • 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 一个不断努力学习的女程序员