nodejs幾種文件路徑及path模塊

前言

最近在寫一篇weex的webpack配置,剛剛踩坑了,weekpack中會用到path模塊,而對於這個模塊,我想抽離出來看一下,由於這個用到的仍是比較多的,喜歡的朋友能夠點個喜歡,或者去個人github點個star也行,謝謝支持,舉起小手指點一點哦😯,寫的不對的地方,評論拍磚,謝謝。html

node中的路徑分類

node中的路徑大體分5類,dirname,filename,process.cwd(),./,../,其中前三個都是絕對路徑node

咱們先來看一個簡單點的例子webpack

假如,我有一個文件的目錄結構以下:git

editor/
  - dist/
  - src/
      - task.js複製代碼

而後咱們在task.js文件中寫入一下代碼github

const path = require('path');
console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
console.log(path.resolve('./'));複製代碼

在editor目錄下運行node src/task.js,咱們能夠看到結果以下:web

/Users/laihuamin/Documents/richEditor/editor/src
/Users/laihuamin/Documents/richEditor/editor/src/task.js
/Users/laihuamin/Documents/richEditor/editor
/Users/laihuamin/Documents/richEditor/editor複製代碼

而後咱們有能夠在src目錄下運行這個文件,node task.js,運行結果以下:api

/Users/laihuamin/Documents/richEditor/editor/src
/Users/laihuamin/Documents/richEditor/editor/src/task.js
/Users/laihuamin/Documents/richEditor/editor/src
/Users/laihuamin/Documents/richEditor/editor/src複製代碼

對比兩個輸出結果,咱們能夠概括一下幾點:bash

1.__dirname:返回的是這個文件所在文件夾的位置
2.__filename:你運行命令表明的是文件所在的位置,無論你運行什麼命令,都是指向文件
3.process.cwd():你運行node命令所在文件夾的位置,好比你在src目錄下運行,那麼就是輸出到src爲止,下面的同理。weex

path

講完前面三個絕對路徑,我卻是挺想來聊聊path這個模塊的,這個node模塊在不少地方都有應用,因此,對於咱們來講,掌握他,對咱們之後的發展更有利,不用每次看webpack的配置文件還要去查詢一下這個api是幹什麼用的,很影響咱們的效率網站

nodeJS/path

上面那個網站有詳細的api,可是咱們這裏不用都掌握吧,我就講幾個我遇到過的,我以爲webpack等工程配置中會用到的

path.normalize

這個方法就是把不規範的路徑規範化,好比看下面的例子

const path = require('path');
console.log(path.normalize('/foo/bar//baz/asdf/quux/..'));複製代碼

輸出結果:

/foo/bar/baz/asdf複製代碼

path.join

const path = require('path');
console.log(path.join('src', 'task.js'));

const path = require('path');
console.log(path.join('dist', 'task.js'));

const path = require('path');
console.log(path.join(''));複製代碼

這麼兩個的輸出結果是:

src/task.js
dist/task.js
.複製代碼

他的做用也就顯而易見,他有一下幾條規則:
1.傳入的參數是字符串的路徑片斷,能夠是一個,也能夠是多個

2.返回的是一個拼接好的路徑,可是根據平臺的不一樣,他會對路徑進行不一樣的規範化,舉個例子,Unix系統是」/「,Windows系統是」\「,那麼你在兩個系統下看到的返回結果就不同。

3.若是返回的路徑字符串長度爲零,那麼他會返回一個'.',表明當前的文件夾。

4.若是傳入的參數中有不是字符串的,那就直接會報錯

path.parse

咱們先來看個例子,在src目錄下的task.js寫入

const path = require('path');
console.log(path.parse('/Users/laihuamin/Documents/richEditor/editor'));複製代碼

而後運行node src/task.js以後,輸出的結果以下:

{ 
  root: '/',
  dir: '/Users/laihuamin/Documents/richEditor',
  base: 'editor',
  ext: '',
  name: 'editor' 
}複製代碼

他返回的是一個對象,那麼咱們來把這麼幾個名詞熟悉一下:

path.parse
path.parse

這個表格應該展現的很形象,可是咱們仍是來解釋一下這些名詞:
1.root:表明根目錄
2.dir:表明文件所在的文件夾
3.base:表明整一個文件
4.name:表明文件名
5.ext: 表明文件的後綴名

那咱們根據下面的規則,來看一下下面這個例子,最好本身腦子作一遍

const path = require('path');
console.log(path.parse('/Users/laihuamin/Documents/richEditor/editor/src/task.js'));複製代碼

輸出的結果:

{ 
  root: '/',
  dir: '/Users/laihuamin/Documents/richEditor/editor/src',
  base: 'task.js',
  ext: '.js',
  name: 'task' 
}複製代碼

你作對了麼?0.0

path.basename

那有了前面這個鋪墊,想必這個接口猜也能猜的到了。。。。咱們看下面這個例子

const path = require('path');
console.log(path.basename('/Users/laihuamin/Documents/richEditor/editor/src/task.js'));複製代碼

輸出的結果是:

task.js複製代碼

咱們仍是簡單介紹一下,接收兩個參數,一個是path,還有一個是ext(可選參數).

const path = require('path')
console.log(path.basename('/Users/laihuamin/Documents/richEditor/editor/src/task.js', '.js'));複製代碼

輸出結果:

task複製代碼

path.dirname

這個接口比basename還要簡單,我就很少說了,看例子,看結果

const path = require('path');
console.log(path.basename('/Users/laihuamin/Documents/richEditor/editor/src/task.js'));複製代碼

輸出的結果:

/Users/laihuamin/Documents/richEditor/editor/src複製代碼

注意一下,接收的參數是字符串類型

path.extname

這個就是展現文件的擴展名,咱們得注意幾種狀況

const path = require('path');
path.extname('index.html');
path.extname('index.coffee.md');
path.extname('index.');
path.extname('index');
path.extname('.index');複製代碼

輸出的結果是:

.html
.md
.
''
''複製代碼

本身注意一下這幾個狀況

path.resolve

咱們經過下面這幾個例子先來熟悉一下:

const path = require('path');
console.log(path.resolve('/foo/bar', '/bar/faa', '..', 'a/../c'));複製代碼

輸出的結果是

/bar/c複製代碼

他就至關於一堆cd操做,咱們一步一步看

cd /foo/bar/    //這是第一步, 如今的位置是/foo/bar/
cd /bar/faa     //這是第二步,這裏和第一步有區別,他是從/進入的,也就時候根目錄,如今的位置是/bar/faa
cd ..       //第三步,從faa退出來,如今的位置是 /bar
cd a/../c   //第四步,進入a,而後在推出,在進入c,最後位置是/bar/c複製代碼

可是這個操做和cd仍是有區別的,這個路徑不必定要存在,並且最後的能夠是文件

path.relative

這個返回的是from到to的相對路徑,什麼意思呢,咱們看下面的例子就知道了.

const path = require('path');
console.log(path.relative('src/bar/baz', 'src/aaa/bbb'));複製代碼

輸出的結果是:

../../aaa/bbb複製代碼

總結

這些比較實用的方法,分享給你們,本身仍是老老實實去看weektool的webpack的配置文件了,喜歡的朋友能夠點個喜歡,或者去個人github點個star也行,謝謝支持,舉起小手指點一點哦😯。

相關文章
相關標籤/搜索