久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

一文聊聊node中的path模塊

一文聊聊node中的path模塊

node.js極速入門課程:進入學習

path 模塊是 nodejs 中用于處理文件/目錄路徑的一個內置模塊,可以看作是一個工具箱,提供諸多方法供我們使用,當然都是和路徑處理有關的。同時在前端開發中 path 模塊出現的頻率也是比較高的,比如配置 webpack 的時候等。本文是對該模塊中一些常用的方法進行介紹,走,一起學習下吧。【相關教程推薦:nodejs視頻教程、編程教學】

  • 需要注意下,nodejs 中所有的模塊(內置,自定義)都需要使用 requier 進行導入,一般導入位置在文件頂部。

const path = require('path');
登錄后復制

API

basename (獲取路徑基礎名)

  • path.basename(path[,ext])
    • path:文件/目錄路徑
    • ext:(可選)文件擴展名 例如 .js .css 等
    • 返回值:path 路徑的最后一部分
  • 注意:
    • 如果 path 不是字符串或者給定的 ext 參數不是字符串,則拋出 TypeError
    • 如果有 ext 參數,當 ext 后綴名與文件名匹配上時返回的文件名會省略文件后綴
    • 如果 path 尾部有目錄分隔符則會被忽略

const path = require("path");  path.basename('./ext/test.js') //test.js path.basename('./ext/test.js','.js') //test (當后綴名與文件名匹配上時返回的文件名會省略文件后綴) path.basename('./ext/test.js','.html') //test.js (沒有匹配上時返回文件全名) path.basename('./ext/foo/') // foo (尾部目錄分隔符被忽略)
登錄后復制

dirname (獲取路徑目錄名)

  • path.dirname(path)
    • path:文件/目錄路徑
    • 返回值:path 路徑的目錄名
  • 注意:
    • 如果 path 不是字符串,則拋出 TypeError
    • 如果 path 尾部有目錄分隔符則會被忽略

const path = require("path");  path.dirname('./foo/bar/baz'); //./foo/bar (相對路徑/絕對路徑均可) path.dirname('/foo/bar/baz/'); // /foo/bar (尾部目錄分隔符被忽略) path.dirname('/foo/bar/baz/test.js'); // /foo/bar/baz
登錄后復制

extname (獲取路徑擴展名)

  • path.extname(path)
    • path:文件/目錄路徑
    • 返回值:path 路徑的擴展名,從最后一次出現 '.' 字符到 path 最后一部分的字符串結束,無擴展名則返回空
  • 注意:
    • 如果 path 不是字符串,則拋出 TypeError

const path = require("path");  path.extname('foo/bar/baz/test.js'); // .js path.extname('foo/bar/baz');// '' (無擴展名返回 '') path.extname('foo/bar/baz/.'); // '' path.extname('foo/bar/baz/test.'); // '.' path.extname('foo/bar/baz/.test'); // '' path.extname('foo/bar/baz/.test.js'); // '.js'
登錄后復制

parse (解析路徑)

  • path.parse(path) ( str => obj )
    • path:文件/目錄路徑
    • 返回值:帶有屬性(dir,root,base,name,ext)的對象
      • root:根目錄
      • dir: 文件所在的文件夾
      • base:完整文件 ( index.js )
      • name:文件名
      • ext: 文件后綴名
  • 注意:
    • 如果 path 不是字符串,則拋出 TypeError
    • 如果尾部有目錄分隔符則會被忽略
  • 一圖勝千言

┌──────────────────┬────────────┐ │          dir     │    base    │ ├──────┬           ├──────┬─────┤ │ root │           │ name │ ext │ "  /    foo/bar/baz/ index  .js "
登錄后復制

const path = require("path");  path.parse('/foo/bar/baz/index.js') // { //     root: '/', //     dir: '/foo/bar/baz', //     base: 'index.js', //     ext: '.js', //     name: 'index' //   }  path.parse('/foo/bar/baz') //尾部目錄分隔符省略 // { //     root: '/', //     dir: '/foo/bar', //     base: 'baz', //     ext: '', //     name: 'baz' //   }  path.parse('./foo/bar/baz/index.js') //當路徑為相對路徑 ./ 或../時 解析結果中root(代表根目錄,絕對路徑才有值)為 '' // { //     root: '', //     dir: './foo/bar/baz', //     base: 'index.js', //     ext: '.js', //     name: 'index' //   }
登錄后復制

format (序列化路徑)

  • path.format(pathObj) 序列化 path 路徑,與 path.parse() 剛好相反

    • pathObj:path對象
    • 返回值:序列化后的字符串路徑 ( obj => string )
  • 注意:

    • 如果 pathObject 不是對象,則拋出 TypeError
    • pathObject 中的屬性需要注意優先級:
      • 當 dir 屬性存在則忽略 root 屬性
      • 當 base 屬性存在則會忽略 name 和 ext 屬性

isAbsolute (是否是絕對路徑)

  • path.isAbsolute(path)

    • path:文件/目錄路徑
    • 返回值:true/false
  • 注意:

    • 如果 path 不是字符串,則拋出 TypeError
    • 如果給定的 path 字符串長度為0,則返回 false

    參考 前端面試題詳細解答

const path = require("path");  path.isAbsolute('//foo'); // true path.isAbsolute('\\foo'); // true path.isAbsolute('C:/foo/..'); // true path.isAbsolute('C:\foo\..'); // true path.isAbsolute('./bar\baz');  // false path.isAbsolute('../bar/baz'); // false path.isAbsolute('.'); // false path.isAbsolute('');  // false
登錄后復制

join(拼接路徑片段)

  • path.join([…paths])
    • paths:路徑片段
    • 返回值:使用平臺特定的分隔符作為定界符將所有給定的 path 片段連接在一起規范化后生成的路徑
  • 注意:
    • 如果 paths 不是字符串片段,則拋出 TypeError
    • 零長度的 path 片段會被忽略
    • 如果連接后的路徑字符長度為0,則返回 '.',表示當前工作目錄
    • 目錄分隔符有平臺差異,windows 返回為 ' '

const path = require("path");  path.join('') // '.' path.join('./') // '.'path.join('../') // '..'path.join('/foo/','bar','baz','../','index.js') // 'foobarindex.js'path.join('./bar','baz' ,'/','../','',index.js') // 'barindex.js' path.join('foo', {}, 'bar'); // 'TypeError: Path must be a string. Received {}'
登錄后復制

normalize(規范化路徑)

  • path.normalize(path)
    • path: 文件/目錄路徑
    • 返回值:規范后的路徑字符串
  • 注意:
    • 如果 path 不是字符串片段,則拋出 TypeError
    • 尾部的分隔符會保留
    • 如果 path字符串長度為0,則返回 '.',表示當前工作目錄
    • 路徑中的目錄分隔符均會被替換成平臺特定的目錄分隔符,windows 系統 會將 '/' 或'' 均替換成 ''
    • 路徑中連續的多個分隔符會被規范化為一個
    • 路徑中最好不要出現單個 ' ',因為當和字母在一起的時候會被當做轉義符

const path = require("path");  path.normalize('') // '.'path.normalize('temp//foo//bar//..//'); // tempfoopath.normalize('C:////temp\\/\/\/foo/bar') // C:tempfoobarpath.normalize('..////foo//bar/baz/') // ..fooarbaz (轉義字符出現)path.normalize('temp//foo/bar') // tempfooar (轉義字符出現)
登錄后復制

relative(獲取 from 到 to 的相對路徑)

  • path.relative(from,to)
    • from,to: 文件/目錄路徑
    • 返回值:from 到 to 的相對路徑(to 相對于 form 的相對路徑)
  • 注意:
    • 如果 from 和 to 指向相同路徑相同 則返回 ''
    • 如果 from 或 to 任何一方為空,則使用當前工作目錄代替其空路徑

const path = require("path");  //當前工作目錄為 Stonenodenodepath_module path.relative('/foo/bar/baz','/foo/bar/dir/file.js') // ..dirfile.js path.relative('/foo/bar/baz','/foo/bar/baz') // '' path.relative('/foo/bar/baz/files.js','') // ........Stonenodenodepath_module path.relative('','/foo/bar/baz/files.js') // ........foobarbazfiles.js path.relative('','./foo/bar/baz/files.js') // foobarbazfiles.js
登錄后復制

這里針對 from 或 to 任何一方為空,則使用當前工作目錄代替其空路徑。稍作說明下, 例如當前工作目錄為 Stonenodenodepath_module,則可以看到 path.relative('/foo/bar/baz/files.js','') 的輸出結果為........Stonenodenodepath_module,此時 to 為 Stonenodenodepath_module, 要輸出 to 相對于 from 的相對路徑,則 from 需要先 ../ 的形式 一層一層退出,來檢索與 to 的公共父級目錄,直到遇到公共父級目錄或者到根目錄停止,然后cd 進 to 目錄。這是針對另一方為絕對路徑,如果另一方為相對路徑,則直接就是當前另一方路徑。

resolve(將路徑或路徑片段的序列解析為絕對路徑)

  • path.resolve([…paths])
    • paths: 路徑或路徑片段的序列
    • 返回值:路徑或路徑片段序列解析為絕對路徑。(將路徑片段解析后生成的絕對路徑)
  • 注意:
    • 路徑片段如果給出則必須是字符串類型,否則類型錯誤
    • 給定的路徑序列從右到左進行處理,每個后續的 path 前置,直到構造出一個絕對路徑
    • 如果處理完所有給定的 path 片段之后還未生成絕對路徑,則再加上當前工作目錄
    • 生成的路徑均已規范化,并且除非將路徑解析為根目錄,否則將刪除尾部斜杠
    • 零長度的 path 片段會被忽略
    • 若沒有傳入 path 片段,則 path.resolve() 將返回當前工作目錄的絕對路徑

const path = require("path");  //當前工作目錄為 Stonenodenodepath_module path.resolve('/foo/bar', './baz'); // '/foo/bar/baz' path.resolve('/foo/bar','', '/tmp/file/'); //'/tmp/file' path.resolve('root', 'foo/baz/', '../fun/bar') // 'Stonenodenodepath_modulerootfoofunbar' path.resolve() // 'Stonenodenodepath_module'
登錄后復制

path.resolve 方法解析路徑片段的時候會從右往左的順序依次解析,直到構造出一個絕對路徑,否則會將當前工作目錄加在路徑開頭。所以,通過 resolve 解析生成的路徑一定是絕對路徑。這個方法使用的非常多,應該特眼熟,對,前端我們配置 webpack 的時候會高頻率用到,并且往往還會結合 __dirname 使用。

__dirname,__filename

  • __dirname:可以看作是 nodejs 中的全局變量,它始終表示當前執行文件所在目錄的完整目錄名(絕對路徑)
  • __filename:可以看作是 nodejs 中的全局變量,它始終表示當前執行文件的完整文件名(完整絕對路)

我們先在 path_module 目錄下運行 node test.js 命令

<!--當前執行文件的完整路徑為Stonenodenodepath_moduletest.js--> const path = require("path");  console.log(__dirname); // Stonenodenodepath_module console.log(__filename); // Stonenodenodepath_moduletest.js
登錄后復制

然后我們在 Stonenodenode 目錄下運行 node path_moduletest.js,會發現輸出結果同上, 所以這就是說明 __dirname 和 __filename 始終跟當前執行文件有關,跟啟動腳本所在目錄無關。

./ ../

./../ 我們都知道是相對路徑的寫法,但是使用的過程中配合 require() 使用與否的結果是不同的。

  • fs_module 目錄下 執行 node test.js

<!--當前啟動腳本的執行命令所在目錄 Stonenodenodefs_moduletest.js--> const fs = require('fs')  fs.readFileSync('./ext/test1.js',(err,data)=> {     console.log('ok') })
登錄后復制

會正常打印出 ok

  • Stonenodenode 目錄下 執行 node fs_moduletest.js

<!--當前啟動腳本的執行命令所在目錄 Stonenodenode--> const fs = require('fs')  fs.readFile('./ext/test1.js',(err,data)=> {     console.log('ok') })
登錄后復制

運行會報錯 no such file or directory, open './ext/test1.js'

這到底是為啥嘞,原因就是 './' 和 '../' 的路徑表示意義需要分情況,當結合 require() 使用的時候相對于當前執行文件,如果不結合 require() 使用的情況下會相對于當前啟動腳本的目錄,因此只有在 require() 時才使用相對路徑(./, ../) 的寫法,其他地方一律使用絕對路徑,這點一定要注意。

結語

關于nodejs path 模塊,我們今天就說到這里了,雖然 api 不是很多,但是 path 模塊在前端的使用頻率還是非常高的,所以覺得很值得學習了解一下的。由于認知有限,本文若有不準確之處還望路過的各位兄臺及時指正,吃瓜,吃瓜。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产一区二区三区成人欧美日韩在线观看| 久久只有精品| 五月激情久久| 日韩免费福利视频| 欧美日韩精品免费观看视欧美高清免费大片| 久久精品天堂| 清纯唯美亚洲综合一区| 亚洲精品免费观看| 欧美日韩中出| 国产精品观看| 四虎国产精品免费观看| 日韩av二区| 蜜臀国产一区| 午夜久久黄色| 亚洲午夜免费| 国产亚洲久久| 国产成人精选| 久久美女精品| 免费国产自线拍一欧美视频| 蜜臀久久久99精品久久久久久| 日韩精品一区二区三区免费视频| 香蕉久久一区| 麻豆成人av在线| 久久久夜精品| 中文一区一区三区免费在线观 | 欧美日韩网址| 久久婷婷国产| 久久精品二区三区| 久久亚洲国产精品一区二区| 色综合视频一区二区三区日韩| 国产精品一区二区三区av| 国产精品99一区二区三| 亚洲天堂一区二区| 黄色av日韩| 亚洲精品系列| 国精品产品一区| 亚洲一级在线| 国产精品一级| 99成人超碰| 日韩精品三级| 天堂√8在线中文| 视频一区中文字幕| 久久gogo国模啪啪裸体| 婷婷激情一区| 亚洲在线久久| 精品国产99| 亚洲欧美日韩专区| 日韩av网站在线免费观看| 91亚洲一区| 亚洲视频二区| 欧美亚洲日本精品| 亚洲视频国产精品| 精品久久久亚洲| 男人天堂欧美日韩| 麻豆国产精品视频| 日韩网站在线| 精品视频自拍| 在线一区二区三区视频| 国产一区二区三区网| 亚洲欧洲日本mm| 麻豆国产欧美日韩综合精品二区| 91成人精品| 国产毛片一区二区三区| 五月综合激情| 精品少妇av| 性一交一乱一区二区洋洋av| 国产 日韩 欧美 综合 一区| 视频一区二区三区中文字幕| 久久久久久色 | 在线日韩视频| 国产精品天堂蜜av在线播放| 亚洲国产成人精品女人| 毛片不卡一区二区| 男女性色大片免费观看一区二区| 精品日产乱码久久久久久仙踪林| 视频一区二区三区在线| 欧美不卡高清一区二区三区| 日本中文字幕视频一区| 久久精品国内一区二区三区水蜜桃| 国产探花一区| 快she精品国产999| 日韩国产一区二区三区| 午夜亚洲福利| 免费av一区| 国产成人精品一区二区三区免费| 亚洲精品第一| 怡红院精品视频在线观看极品| 精品视频高潮| 国产美女亚洲精品7777| 美女精品网站| 久久久9色精品国产一区二区三区| 国产精品亚洲欧美日韩一区在线| 久久都是精品| 欧美国产91| 欧洲一区二区三区精品| 久久精品国产成人一区二区三区| 日韩美女精品| 另类av一区二区| 亚洲成人不卡| 日韩av免费大片| 久久精品九色| 欧美激情麻豆| 欧美国产中文高清| 国产精品亚洲产品| 清纯唯美亚洲综合一区| 亚洲有吗中文字幕| 久久av一区二区三区| 亚州av乱码久久精品蜜桃| 亚洲精品国产嫩草在线观看 | 国产精品美女午夜爽爽| 亚洲制服欧美另类| 国产精品普通话对白| 免费国产自久久久久三四区久久 | 在线 亚洲欧美在线综合一区| 99久久久久国产精品| 久久精品123| 欧美一区二区三区高清视频| 久久久久中文| 日韩欧美视频专区| 成人精品国产亚洲| 色婷婷色综合| 性欧美videohd高精| 久久精品主播| 伊人影院久久| 亚洲一区二区三区四区电影| 亚洲涩涩av| 日韩不卡手机在线v区| 91久久精品无嫩草影院| 欧美日本久久| 免费在线观看一区| 国产中文字幕一区二区三区| 超级白嫩亚洲国产第一| 精品日韩在线| 日本激情一区| 亚洲精品一区三区三区在线观看| 久久久久一区| aa国产精品| 婷婷综合成人| 国产精品主播| 久久男人av资源站| 黄色不卡一区| 伊人www22综合色| 欧美日韩夜夜| 精品一区二区三区亚洲| 成人日韩在线| 性色av一区二区怡红| 日本久久一区| 国内精品美女在线观看| 日韩国产激情| 国产高清一区| 香蕉久久一区| 久久久久伊人| 欧美日韩中文一区二区| 久久福利精品| 国产精品一级| 久久久久国产精品一区二区| 亚洲一区二区三区高清不卡| 日本亚洲视频在线| 精品伊人久久久| 国产高清一区二区| 日本视频中文字幕一区二区三区| 精品一区av| 99国产精品| 国产日韩欧美中文在线| 国产成人在线中文字幕| 不卡一区综合视频| 国产欧美综合一区二区三区| 欧美日韩国产观看视频| 亚洲欧美日韩精品一区二区| 欧美一区二区三区久久| 国产网站在线| 麻豆91精品| 美女精品一区二区| 亚洲免费精品| 欧美黄色一区| 99视频在线精品国自产拍免费观看| 欧美亚洲免费| 美女网站一区| 国产欧美日韩在线一区二区| 狠狠躁少妇一区二区三区| 中文精品电影| www.51av欧美视频| 日本亚洲欧美天堂免费| 女生影院久久| 日韩精品一区二区三区中文在线| 日韩国产欧美| 国产亚洲字幕| 黄色国产精品| 国产一区二区三区国产精品| 亚洲涩涩av| 91精品亚洲| 久久成人福利| 另类国产ts人妖高潮视频| 久久精品国产福利| 夜夜嗨网站十八久久| 精品91福利视频| 少妇精品久久久一区二区| 久久天堂av| 国产高清亚洲| 亚洲日本免费电影|