node中的路徑 path __dirname path.resolve path.join


__dirname與./的區別

Node.js中,__dirname總是指向被執行js文件的絕對路徑,所以當你在/d1/d2/myScript.js文件中寫了__dirname,它的值就是/d1/d2

./會返回你執行node命令的路徑,

比如你在目錄D盤下執行d1/d2/myScript.js

__dirname是d:/d1/d2

./指的是d:/

有一個特殊情況在require()中使用./時,這時的路徑就會是含有require()的腳本文件的相對路徑

例如:

假如有如下目錄結構:

/dir1

  /dir2

   /pathtest.js

pathtest.js

const path=require('path');
console.log('.= %s',path.resolve('__dirname'));
console.log('__dirname= %s',path.resolve('.'));

然后執行下面的代碼:

cd /dir1/dir2

node pathtest.js

結果:

. = /dir1/dir2
__dirname = /dir1/dir2

 

如果我們的工作目錄是dir1

cd /dir1

node dir2/pathtest.js

結果:

. = /dir1
__dirname = /dir1/dir2

此時,.指向我們的工作目錄,即/dir1,__dirname還是指向/dir1/dir2

在require中使用.

如果在dir2/pathtest.js中調用了require方法,去引入位於dir1目錄的js文件,你需要寫成

require('../pathtest.js')

因為require中的路徑總是相對於包含它的文件,跟你的工作目錄沒有關系。

path.resolve([...paths])  根據參數解析出一個絕對路徑

傳入參數:.../paths是傳入的字符串參數,是路徑序列或者路徑片段

返回值:字符串

 以應用程序為根目錄

普通字符串代表子目錄

/代表絕對路徑根目錄

使用方法:

1 path.resolve()方法可以將路徑或者路徑片段解析成絕對路徑

2 傳入的路徑從右至左被處理,后面每個path被依次解析,直到構造完成一個絕對路徑。例如:path.resolve(‘/foo’,‘/bar’,‘baz’),將返回:/bar/baz

3 如果處理完全部給定的path片段后還未生成一個絕對路徑,則當前工作目錄(絕對路徑)會被用上。

4 當傳入的參數沒有/時,將被傳入解析到當前根目錄

5 零長度的路徑將被忽略

6 如果沒有傳入參數,將返回當前根目錄

事例代碼:
path.resolve('/foo/bar', './baz')
// Returns: '/foo/bar/baz'
 

path.resolve('/foo/bar', '/tmp/file/')
// Returns: '/tmp/file'

path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif')
// if the current working directory is /home/myself/node,
// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'

1 傳入的路徑從右向左解析,遇到第一個絕對路徑時完成解析

2 ‘../’方法向前跳了一個目錄

path.resolve()是一個修改和整合文件路徑的方法

__dirname

運行下面的代碼:

執行結果:

 

結果分析:
1.只傳入__dirname也可以自動調用path.resolve方法
2.可以拼接路徑字符串,但是不調用path.resolve()方法拼接失敗
3.__dirname代表的是當前文件(a.js)的絕對路徑
4.從右至左解析,遇到了絕對路徑/src,因此直接返回
 
path.resolve()與__dirname最便捷的地方在於,與webpack結合更快捷的訪問常用的文件。說白了就是解決了"由於訪問文件所在的目錄不同,訪問固定目錄下的某個文件,必須使用煩人的../../"這個痛點;
比如當我們結合webpack為目錄設置快捷的import方法的時候。
修改之前 import foo from '../../../util/foo'
修改之后import foo from 'util/foo'
webpack配置 build/webpack.dev.conf.js
resolve:{
  //解析擴展名
   extensions:[],
 alias:{
  // 快捷訪問入口
  “util”:path.resolve(__dirname,'./src/util')
   }
}

path.join([...paths])

path.join() 方法使用平台特定的分隔符把全部給定的 path 片段連接到一起,並規范化生成的路徑。就是把多個參數字符串合並為一個路徑字符串

 

 

參考1:https://blog.csdn.net/zsensei/article/details/79094714

參考2:https://www.jianshu.com/p/76966243f27f

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM