国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

作為一個(gè)前端工程師也要掌握的幾種文件路徑知識(shí)

wslongchen / 2993人閱讀

摘要:前言之前在做配置時(shí)候多次用到路徑相關(guān)內(nèi)容,最近在寫項(xiàng)目的時(shí)候,有一個(gè)文件需要上傳到阿里云的功能,同時(shí)本地服務(wù)器也需要保留一個(gè)文件備份。如果返回的路徑字符串長度為零,那么他會(huì)返回一個(gè),代表當(dāng)前的文件夾。

前言

之前在做webpack配置時(shí)候多次用到路徑相關(guān)內(nèi)容,最近在寫項(xiàng)目的時(shí)候,有一個(gè)文件需要上傳到阿里云oss的功能,同時(shí)本地服務(wù)器也需要保留一個(gè)文件備份。多次用到了文件路徑相關(guān)內(nèi)容以及Node核心API的path模塊,所以系統(tǒng)的學(xué)習(xí)了一下,整理了這篇文章。

node中的路徑分類

node中的路徑大致分5類,dirname,filename,process.cwd(),./,../,其中dirname,filename,process.cwd()絕對路徑

通過代碼對每個(gè)分類進(jìn)行說明:

文件目錄結(jié)構(gòu)如下:

代碼pra/
  - node核心API/
      - fs.js
      - path.js

path.js中的代碼

const path = require("path");
console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
console.log(path.resolve("./"));

在代碼pra目錄下運(yùn)行命令 node node核心API/path.js,我們可以看到結(jié)果如下:

/koala/Desktop/程序員成長指北/代碼pra/node核心API
/koala/Desktop/程序員成長指北/代碼pra/node核心API/path.js
/koala/Desktop/程序員成長指北/代碼pra
/koala/Desktop/程序員成長指北/代碼pra

然后我們有可以在node核心API目錄下運(yùn)行這個(gè)文件,node path.js,運(yùn)行結(jié)果如下:

/koala/Desktop/程序員成長指北/代碼pra/node核心API
/koala/Desktop/程序員成長指北/代碼pra/node核心API/path.js
/koala/Desktop/程序員成長指北/代碼pra/node核心API
/koala/Desktop/程序員成長指北/代碼pra/node核心API

對比輸出結(jié)果,暫時(shí)得到的結(jié)論是

__dirname: 總是返回被執(zhí)行的 js 所在文件夾的絕對路徑

__filename: 總是返回被執(zhí)行的 js 的絕對路徑

process.cwd(): 總是返回運(yùn)行 node 命令時(shí)所在的文件夾的絕對路徑

./: 跟 process.cwd() 一樣,返回 node 命令時(shí)所在的文件夾的絕對路徑

為什么說上面是暫時(shí)得到的結(jié)論,因?yàn)槭怯绣e(cuò)誤的,再看一段代碼:
我們在path.js中加上這句代碼

exports.A = 1;

之前直接通過readFile讀取文件路徑報(bào)錯(cuò),

fs.readFile("./path.js",function(err,data){
   
});

現(xiàn)在在剛才報(bào)錯(cuò)的fs.js里面加這兩句代碼看看:

const test = require("./path.js");
console.log(test)

代碼pra/目錄下運(yùn)行node node核心API/fs.js,最后查看結(jié)果,說明是可以訪問到的:

{ A: 1 }

那么關(guān)于 ./ 正確的結(jié)論是:

require() 中使用是跟 __dirname 的效果相同,不會(huì)因?yàn)閱?dòng)腳本的目錄不一樣而改變,在其他情況下跟 process.cwd() 效果相同,是相對于啟動(dòng)腳本所在目錄的路徑。

路徑知識(shí)總結(jié):

__dirname: 獲得當(dāng)前執(zhí)行文件所在目錄的完整目錄名

__filename: 獲得當(dāng)前執(zhí)行文件的帶有完整絕對路徑的文件名

process.cwd():獲得當(dāng)前執(zhí)行node命令時(shí)候的文件夾目錄名

./: 不使用require時(shí)候,./process.cwd()一樣,使用require時(shí)候,與__dirname一樣

只有在 require() 時(shí)才使用相對路徑(./, ../) 的寫法,其他地方一律使用絕對路徑,如下:

// 當(dāng)前目錄下
 path.dirname(__filename) + "/path.js"; 
// 相鄰目錄下
 path.resolve(__dirname, "../regx/regx.js");
path

前面講解了路徑的相關(guān)比較,接下來多帶帶聊聊path這個(gè)模塊,這個(gè)模塊在很多地方比較常用,所以,對于我們來說,掌握他,對我們以后的發(fā)展更有利,不用每次看webpack的配置文件還要去查詢一下這個(gè)api是干什么用的,很影響我們的效率

這是api官網(wǎng)地址:https://nodejs.org/api/path.html

個(gè)人認(rèn)為官網(wǎng)中的api沒有必要都掌握,下面會(huì)對一些常用的api進(jìn)行講解,我經(jīng)常用到的,或者作為一個(gè)前端開發(fā)工程師在webpack等工程配置的時(shí)候經(jīng)常用到的。

path.normalize

舉例說明

const path = require("path");

console.log(path.normalize("/koala/Desktop//程序員成長指北//代碼pra/.."));

規(guī)范后的結(jié)果

/koala/Desktop/程序員成長指北/代碼pra

作用總結(jié)

規(guī)范化路徑,把不規(guī)范的路徑規(guī)范化。

path.join

舉例說明

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

const path = require("path");
console.log(path.join(""));

轉(zhuǎn)化后的結(jié)果

src/task.js
.

作用總結(jié)

path.join([...paths])

傳入的參數(shù)是字符串的路徑片段,可以是一個(gè),也可以是多個(gè)

返回的是一個(gè)拼接好的路徑,但是根據(jù)平臺(tái)的不同,他會(huì)對路徑進(jìn)行不同的規(guī)范化,舉個(gè)例子,Unix系統(tǒng)是/Windows系統(tǒng)是,那么你在兩個(gè)系統(tǒng)下看到的返回結(jié)果就不一樣。

如果返回的路徑字符串長度為零,那么他會(huì)返回一個(gè).,代表當(dāng)前的文件夾。

如果傳入的參數(shù)中有不是字符串的,那就直接會(huì)報(bào)錯(cuò)

path.parse

舉例說明

const path = require("path");
console.log(path.parse("/koala/Desktop/程序員成長指北/代碼pra/node核心API"));

運(yùn)行結(jié)果

{ root: "/",
  dir: "/koala/Desktop/程序員成長指北/代碼pra",
  base: "node核心API",
  ext: "",
  name: "node核心API" 
}

作用總結(jié)

他返回的是一個(gè)對象,那么我們來把這么幾個(gè)名詞熟悉一下:

root:代表根目錄

dir:代表文件所在的文件夾

base:代表整一個(gè)文件

name:代表文件名

ext: 代表文件的后綴名

path.basename

舉例說明

const path = require("path");
console.log(path.basename("/koala/Desktop/程序員成長指北/代碼pra/node核心API"));
console.log(path.basename("/koala/Desktop/程序員成長指北/代碼pra/node核心API/path.js", ".js"));

運(yùn)行結(jié)果

看了上面代碼的例子,我想應(yīng)該知道了basename結(jié)果,嘿嘿。

node核心API
path

作用總結(jié)

basename接收兩個(gè)參數(shù),第一個(gè)是path,第二個(gè)是ext(可選參數(shù)),當(dāng)輸入第二個(gè)參數(shù)的時(shí)候,打印結(jié)果不出現(xiàn)后綴名

path.dirname

舉例說明

const path = require("path");
console.log(path.dirname("/koala/Desktop/程序員成長指北/代碼pra/node核心API"));

運(yùn)行結(jié)果

/koala/Desktop/程序員成長指北/代碼pra

作用總結(jié)

返回文件的目錄完整地址

path.extname

舉例說明

const path = require("path");
path.extname("index.html");
path.extname("index.coffee.md");
path.extname("index.");
path.extname("index");
path.extname(".index");

運(yùn)行結(jié)果

.html
.md
.
""
""

作用總結(jié)

返回的是后綴名,但是最后兩種情況返回"",大家注意一下。

path.resolve

舉例說明

const path = require("path");
console.log(path.resolve("/foo/bar", "/bar/faa", "..", "a/../c"));

輸出結(jié)果

/bar/c

作用總結(jié)

path.resolve([...paths])

path.resolve就相當(dāng)于是shell下面的cd操作,從左到右運(yùn)行一遍cd path命令,最終獲取的絕對路徑/文件名,這個(gè)接口所返回的結(jié)果了。但是resolve操作和cd操作還是有區(qū)別的,resolve的路徑可以沒有,而且最后進(jìn)入的可以是文件。具體cd步驟如下

cd /foo/bar/    //這是第一步, 現(xiàn)在的位置是/foo/bar/
cd /bar/faa     //這是第二步,這里和第一步有區(qū)別,他是從/進(jìn)入的,也就時(shí)候根目錄,現(xiàn)在的位置是/bar/faa
cd ..       //第三步,從faa退出來,現(xiàn)在的位置是 /bar
cd a/../c   //第四步,進(jìn)入a,然后在推出,在進(jìn)入c,最后位置是/bar/c
path.relative

舉例說明

const path = require("path");

console.log(path.relative("/data/orandea/test/aaa", "/data/orandea/impl/bbb"));

console.log(path.relative("/data/demo", "/data/demo"));

console.log(path.relative("/data/demo", ""));

運(yùn)行結(jié)果

../../impl/bbb
 ""
 ../../koala/Desktop/程序員成長指北/代碼pra/node核心API

作用總結(jié)

path.relative(from, to)

描述:從from路徑,到to路徑的相對路徑。

邊界:

如果from、to指向同個(gè)路徑,那么,返回空字符串。

如果from、to中任一者為空,那么,返回當(dāng)前工作路徑。

總結(jié)

本篇文章關(guān)于路徑的知識(shí)就說到這里,基礎(chǔ)很重要的,既能節(jié)約開發(fā)時(shí)間,又能減少報(bào)錯(cuò)。

今天就分享這么多,如果對分享的內(nèi)容感興趣,可以關(guān)注公眾號「程序員成長指北」,或者加入技術(shù)交流群,大家一起討論。

進(jìn)階技術(shù)路線

加入我們一起學(xué)習(xí)吧!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/110060.html

相關(guān)文章

  • 一名【合格】前端程師的自檢清單

    摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識(shí),其實(shí)都是來自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。 開篇 前端開發(fā)是一個(gè)非常特殊的行業(yè),它的歷史實(shí)際上不是很長,但是知識(shí)之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研...

    羅志環(huán) 評論0 收藏0
  • 一名【合格】前端程師的自檢清單

    摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識(shí),其實(shí)都是來自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。開篇 前端開發(fā)是一個(gè)非常特殊的行業(yè),它的歷史實(shí)際上不是很長,但是知識(shí)之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系...

    isaced 評論0 收藏0
  • 直擊架構(gòu)本質(zhì):優(yōu)秀架構(gòu)師必須掌握幾種架構(gòu)思維

    摘要:由于文章內(nèi)容較長,所以我把它分成兩篇小文章,在第一篇優(yōu)秀架構(gòu)師必須掌握的架構(gòu)思維中,我會(huì)先介紹抽象分層分治和演化這四種應(yīng)對復(fù)雜性的基本思維。另外,上面的算法是兩路歸并,也可以采用多路歸并,甚至是采用堆排序進(jìn)行優(yōu)化,但是總體分治思路沒有變化。 showImg(https://segmentfault.com/img/bVbeYpP?w=642&h=400); 介紹 架構(gòu)的本質(zhì)是管理復(fù)雜性...

    lijy91 評論0 收藏0
  • 直擊架構(gòu)本質(zhì):優(yōu)秀架構(gòu)師必須掌握幾種架構(gòu)思維

    摘要:由于文章內(nèi)容較長,所以我把它分成兩篇小文章,在第一篇優(yōu)秀架構(gòu)師必須掌握的架構(gòu)思維中,我會(huì)先介紹抽象分層分治和演化這四種應(yīng)對復(fù)雜性的基本思維。另外,上面的算法是兩路歸并,也可以采用多路歸并,甚至是采用堆排序進(jìn)行優(yōu)化,但是總體分治思路沒有變化。 showImg(https://segmentfault.com/img/bVbeYpP?w=642&h=400); 介紹 架構(gòu)的本質(zhì)是管理復(fù)雜性...

    fjcgreat 評論0 收藏0
  • 前端基礎(chǔ)

    摘要:談起閉包,它可是兩個(gè)核心技術(shù)之一異步基于打造前端持續(xù)集成開發(fā)環(huán)境本文將以一個(gè)標(biāo)準(zhǔn)的項(xiàng)目為例,完全拋棄傳統(tǒng)的前端項(xiàng)目開發(fā)部署方式,基于容器技術(shù)打造一個(gè)精簡的前端持續(xù)集成的開發(fā)環(huán)境。 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果讀完本文還不懂,可以揍我。 不論你是javascript新手還是老鳥,不論是面試求職,還是日...

    graf 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<