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