nodejs路徑處理方法和絕對路徑

看風景就發表於2018-10-08

1. 路徑處理方法

__dirname     表示當前檔案所在的目錄的絕對路徑
__filename     表示當前檔案的絕對路徑
module.filename ==== __filename 等價
process.cwd()    返回執行當前指令碼的工作目錄的路徑,一般情況下不變,在process.chdir()後,或者shelljs.cd切換目錄後會發生變化
process.chdir()   改變工作目錄

2. 絕對路徑

2.1  要獲取node專案的根路徑,可以使用 node-app-root-path 這個包

2.2  更好的寫絕對路徑的方式是使用best-require這個包

根目錄使用~

require('~/application/apis/controllers/posts');
require('~/application/apis/services/rest');
require('~/application/apis/config');

別名目錄使用:

//長目錄設定別名
const ROOT_PATH = process.cwd();
require('best-require')(ROOT_PATH, {
    apis: ROOT_PATH + '/application/apis',
    controllers: ROOT_PATH + '/application/apis/controllers'
});
//使用別名更簡潔
require(':controllers/posts');
require(':apis/services/rest');
require(':apis/config');

2.3 在全域性變數上掛載路徑

//宣告
var path = require('path')
global.appRequire = function(path) {
    return require(path.resolve(__dirname, path))
}
//使用
var User = appRequire('app/model/User')

 

3. path.join和path.resolve的區別

3.1 path.join 是連線路徑,僅僅做路徑的連線

console.log(path.join(__dirname,'a','b'));   // 假如當前檔案的路徑是E:/node/1,那麼拼接出來就是E:/node/1/a/b。
console.log(path.join(__dirname,'/a','/b','..'));  // 路徑開頭的/不會影響拼接,..代表上一級檔案,拼接出來的結果是:E:/node/1/a
console.log(path.join(__dirname,'a',{},'b'));   // 而且path.join()還會幫我們做路徑字串的校驗,當字串不合法時,會丟擲錯誤:Path must be a string.

3.2 path.resolve 是解析絕對路徑,將一個或多個連線後的路徑解析為絕對路徑,以應用程式為根目錄,普通字串代表子目錄,/代表絕對路徑根目錄

3.2.1 /作為根目錄,多個/開始的路徑,只有最後一個有效,前面的被忽略

path.resolve('/a', '/b') // '/b'

3.2.2 總是返回一個以相對於當前的工作目錄(working directory)的絕對路徑

path.resolve('./a', './b')  // '/Users/username/Projects/webpack-demo/a/b'

3.2.3 path.resolve()方法是以程式為根目錄,作為起點,根據引數解析出一個絕對路徑

console.log(path.resolve());   // 得到應用程式啟動檔案的目錄(得到當前執行檔案絕對路徑)   E:\zf\webpack\1\src
console.log(path.resolve('a','/c'));  // E:/c  因為/斜槓代表根目錄,所以得到的就是E:/c
console.log(path.resolve(__dirname,'img/so'));  // E:\zf\webpack\1\src\img\so   這個就是將檔案路徑拼接,並不管這個路徑是否真實存在。
console.log(path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif'))  // E:\zf\webpack\1\src\wwwroot\static_files\gif\image.gif

 

相關文章