開篇
在上一篇文章中,簡單的對 Nue-CLI 的程式碼透過函式柯里化最佳化了一下,這一次來實現一個獲取下載目錄的功能。
背景
在 Nue-CLI 中,我現在實現的是 create 指令,這個指令本質就是首先拿到模板名稱和版本號之後,然後去進行下載對應的模板,關於下載那麼肯定要面臨的問題就是如何下載?下載到什麼地方?
官方的 Vue-CLI 會先將模板下載到 使用者目錄
中,然後再複製到 執行指令的目錄
中。
那麼官方為什麼要先下載到使用者目錄中呢?
因為下載好的模板可能還需要進行一些其它操作,例如:修改檔案內容,刪除檔案等等。
好那麼開始實現獲取下載目錄的功能。
實現
先去當前本機的使用者目錄進行檢視一下,看看是什麼樣子的,先進入到 C 盤,然後找到使用者目錄:
再找到自己的使用者名稱:
在自己的使用者名稱資料夾當中,這個目錄就是所說的使用者目錄,一般新電腦的設定不會開啟顯示隱藏的專案,如何開啟?
點選顯示隱藏的專案,然後就可以看到隱藏的專案了,什麼是隱藏的專案呢?就是以 .
開頭的專案,例如 .vscode
,.git
等等。
在裡面就會存在使用 Vue-CLI 所拉取的模板,我這裡因為是新電腦,我點進去會發現沒有存在,但是經過我這些內容的介紹我想告訴大家的是,如何找到自己電腦上的使用者目錄。
好了,接下來就是實現獲取下載目錄的功能了,在 Node.js 中有一個模組叫做 os
,這個模組可以獲取到一些系統的資訊,例如:使用者目錄,作業系統等等。
透過 process.env
,可以獲取當前電腦的環境變數,先來簡單的列印看一下輸出什麼內容:
console.log(process.env);
透過觀察控制檯的輸出結果發現一個 USERPROFILE
的環境變數,這個環境變數就是使用者目錄,好,接下來就好辦了。
windows 的獲取方式已經得知了,那麼 mac 呢,所以這裡就要區分一下平臺,該如何進行區分呢?
這裡也可以採用 process
模組,透過 process.platform
方法來獲取當前系統的平臺,windows 是 win32
,mac 是 darwin
,控制檯列印一下看看:
console.log(process.platform);
知道了這些內容就夠編寫程式碼的知識儲備,程式碼如下:
const currentPlatformKey = process.platform === 'win32' ? 'USERPROFILE' : 'HOME';
const downloadDirPath = `${process.env[currentPlatformKey]}\\.nue-template`;
console.log(downloadDirPath);
程式碼很簡單其實就是三行程式碼,首先是根據當前的平臺來獲取對應的環境變數,如果是 windows 那麼就是 USERPROFILE
,如果是 mac 那麼就是 HOME
,這樣一來就可以得出不同平臺的使用者目錄地址,在從 process.env 中獲取到對應的環境變數,然後拼接上 .nue-template
就是下載目錄的地址了。
最後將這個地址返回出去,這樣就可以在後續的程式碼中使用了。