Node路徑那些事

weixin_34370347發表於2018-05-18
  • cwd:當前工作目錄
    • process.cwd()
    • path.resolve()
    • process.chdir()
  • __filename:當前檔案路徑
  • __dirname:當前資料夾路徑
  • path.sep:路徑分隔符
  • 拼接路徑
    • path.normalize()
    • path.join()
  • path.basename()/extname
  • path.parse()/format():解析和重組路徑
  • path.delimiter:環境變數分隔符

pre-notify

emmm,整理一下路徑相關的東東,會更新喲!(づ ̄ 3 ̄)づ

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_modulesa/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); //系統環境變數
複製程式碼

相關文章