[toc]
## cwd:当前工作目录
`cwd`即Current Working Directory,它的中文意思是当前工作目录,它是一个**绝对路径**。
直观感受就是下图中运行`1.test.js`时命令行所处的目录
![](https://user-gold-cdn.xitu.io/2018/5/18/163737426e98f928?w=474&h=119&f=png&s=18376)
### process.cwd()
我们在node中可以这样获取 当前工作目录
```
process.cwd();
```
### path.resolve()
path模块的resolve方法也能获取当前工作目录
```
path.resolve('./');
```
和process.cwd()相比,这个方法的优势在于它还能根据当前工作目录往下拼接路径
```
console.log(path.resolve('./','a'))
<<<输出
当前工作目录的绝对路径+'/a'
```
>[danger] **注意:** 如果拼接路径时候某一个子项带有'/',比如'/a',就会从系统根目录下的a文件夹开始拼接,并且该项之前的拼接项都将失效。(但是在window下若子项带有'\'并不会出现这个问题)
### process.chdir()
此方法能改变当前的工作目录
```
process.chdir('..')
```
## require()
关于require有一点需要注意的是
`require`若使用相对路径,即`./`,那么这个相对路径是相对于当前模块的,而`path.resolve`是相对于`cwd`的!
另外,众所周知的,`a/b/c`,这样的路径会直接在`node_modules`找`a/b/c`。
## __filename:当前文件路径
我们能在模块中使用`__filename`来获取当前文件的绝对路径。
```
console.log(__filename);
```
## __dirname:当前文件夹路径
我们能在模块中使用`__dirname`来获取当前文件夹的绝对路径。
```
console.log(__dirname);
```
## path.sep:路径分隔符
`path.sep`,即 separator ,路径分隔符
```
console.log(path.sep); // /或\ 根据的是你当前的系统是win还是linux系列
console.log(path.win32.sep); //window \
console.log(path.posix.sep); //linux /
```
## 拼接路径
### path.normalize()
该方法会对路径进行容错处理,主要是:
- 路径分隔符多不多
- 有没有`..`,有的话自动转化
```
const {normalize} = require('path');
console.log(normalize('/usr///\/local/////bin')); // /usr/local/bin
console.log(normalize('usr//local/../bin')); // /usr/bin
````
### path.join()
此方法会在真正拼接路径之前调用`path.normalize`
```
const {join} = require('path');
console.log(join('usr/','local','bin')); // usr/local/bin
```
此方法中并不能使用`./`来解析当前模块所处的路径,So我们往往搭配`__dirname`来进行路径的拼接
```
path.join(__dirname,'a','b')
```
## path.basename()/extname
extname->文件类型
```
console.log(path.extname('1.a.b.js')); // .js 取最后一个.
```
basename->文件名
此方法还可以手动指定要去除的后缀(默认为最后一个`.`以及后面的部分)
```
console.log(path.basename('1.a.b.js','b.js')); // 1.a.
```
## path.parse()/format():解析和重组路径
```
onst {parse,format} = require('path');
const ret = parse(filePath);
console.log(ret);
// { root: '/',
// dir: '/usr/local/bin',
// base: 'no.txt',
// ext: '.txt',
// name: 'no' }
console.log(format(ret)); // /usr/local/bin/no.txt
//format若存在冲突dir和base的优先级较高
```
## path.delimiter:环境变量分隔符
`path.delimiter`,delimiter,中文意思是定界符的意思,实际上是`系统变量`的分隔符。
```
let path = require('path');
console.log(path.delimiter);
console.log(path.posix.delimiter); // :
console.log(path.win32.delimiter); // ;
```
查看当前操作系统上设置的环境变量
```
console.log('PATH',process.env.PATH); //系统环境变量
```