2012-05-06 83 views
0

我正在創建我的第一個Node.js模塊,並且在試圖確定處理此問題的最佳方法時遇到困難。接收用戶輸入文件到我的模塊路徑的建議方法是什麼?我怎麼才能解決這個問題呢?用戶調用我的模塊和我的運行代碼的位置在兩個不同的地方。如何解決傳遞給節點模塊的路徑?

讓我們再走一步。比方說,一個用戶擁有這些路徑數組的JSON配置文件(在配置/ settings.json):

{ 
    "paths": [ 
    "../path1", 
    "path2", 
    "/path/to/path3", 
    "~/path4" 
    ] 
} 

現在很明顯,這些路徑是相對於配置文件,沒有任何執行代碼。這感覺不對,因爲現在我的方法必須接受__dirname,相對於__dirname配置文件的路徑等

var mymodule = require('mine'); 
mymodule(__dirname, './config/settings.json'); 

我從配置讀取的所有文件必須然後根據這個配置文件的位置。這感覺很奇怪。建議?

回答

0

FileUtils源:

var updateFileProperties = function (file, path){ 
    file._path = null; 
    file._usablePath = null; 
    file._isAbsolute = false; 

    if (path === undefined || path === null) return; 

    path = PATH.normalize (path); 

    var index = path.indexOf (":") + 1; 
    var windowsRoot = path.substring (0, index); 
    path = path.substring (index); 

    //https://github.com/joyent/node/issues/3066 
    if (path[0] === "/" && path[1] === "/"){ 
     path = path.replace (/[\/]/g, "\\"); 
     path = path.substring (0, path.length - 1); 
    } 

    file._isAbsolute = path[0] === SLASH; 
    file._path = windowsRoot + path; 
    file._usablePath = file._isAbsolute ? file._path : (windowsRoot + PATH.join (file._relative, path)); 
}; 

var File = function (path){ 
    var main = process.mainModule.filename; 
    var cwd = main.substring (0, main.lastIndexOf (SLASH)); 
    var relative = PATH.relative (process.cwd(), cwd); 

    this._relative = relative; 
    //...omitted 

    updateFileProperties (this, path); 
}; 

這段代碼解析的相對路徑問題。 _usablePath包含真實路徑。 「。」路徑將成爲主文件所在的目錄。不管如何調用,它都會指向預期的目錄。

您可以測試打印new File (<path>).getPath()返回的功能。

0

我會避免複雜性,只爲絕對路徑。無論如何,大多數用戶都使用__dirname +'../relativepath'。 (至少這就是我所做的)。

+0

把問題改了一下。 – Eli

+0

__dirname不能用於寫入模塊。 –

相關問題