2017-03-01 32 views
0

我正在開發一個庫,其中我想加載一個或多個相對於requirer的文件。爲了更好地說明這一點:如何要求相對於requirer的文件?

// ~/app.js 
import { horn } from 'unicorn' 
horn.load() 

// ~/node_modules/unicorn/horn.js 
export default { 
    load() { 
    require('./user.config.js') // Here I would like to load the user config 
           // relative to "~/app.js" 
    } 
} 

我試圖檢查在全球require及其parent財產,但只給我一個文件名沒有更多的上下文。

回答

1

這裏就是您提供以下信息:

module.parent 

這是第一個模塊的模塊句柄來加載這個模塊。由於模塊句柄被緩存,這隻會反映第一個加載你的模塊。

module.filename 

這是模塊的全限定文件名。所以,如果你想父模塊的完全合格的文件名,你可以這樣做:

module.parent.filename 

如果你只是想父模塊的路徑,這樣你可以加載從該目錄的東西,那麼你可以拆分關閉文件名的路徑以獲取使用path模塊的路徑。

path.dirname(module.parent.filename) 

如果要加載從該目錄中的文件,你可以這樣做:

let fileToLoad = path.join(path.dirname(module.parent.filename), "user.config.js"); 
let config = require(fileToLoad); 

你必須記住告誡上面module.parent只有第一個模塊返回加載你,因爲在那之後,模塊被緩存並且只有原始模塊句柄被返回(它不被重新加載)。

+0

太棒了!感謝細節和建議。當我抽出時間時,我會試一試,然後我會回來接受答案。 –

+0

@RubensMariuzzo - 你能試試嗎?它對你有用嗎?標記最佳答案以向社區表明問題現在已經完成是否合適? – jfriend00

+0

我還沒有檢查,但我會。我被其他東西吸引了。抱歉! –

相關問題