Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

node无处不在的 path 模块 #1

Open
Liqihan opened this issue Apr 25, 2017 · 0 comments
Open

node无处不在的 path 模块 #1

Liqihan opened this issue Apr 25, 2017 · 0 comments
Labels

Comments

@Liqihan
Copy link
Owner

Liqihan commented Apr 25, 2017

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是'/'

第一次写博客,很多地方不熟悉,见谅

@Liqihan Liqihan added the blog label Apr 25, 2017
@Liqihan Liqihan changed the title 无处不在的 path 模块 node无处不在的 path 模块 Apr 25, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant