[toc]
## cwd:當前工作目錄
`cwd`即Current Working Directory,它的中文意思是當前工作目錄,它是一個**絕對路徑**。
直觀感受就是下圖中運行`1.test.js`時命令行所處的目錄

### 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); //系統環境變量
```