2015-12-02 61 views
1

不同如果開發人員特定的文件存在,我想用開發人員特定的變量覆蓋默認變量。是Gulp require(Path)與fs.existsSync(Path)

各種文件的路徑如下:

// Gulp File 
appPath\gulpfile.js 

// Gulp Tasks 
appPath\gulp\* 

// Gulp Developer Settings 
appPath\gulp-config\* 

我使用fs.existsSync(path)測試如果一個開發人員設定文件是否存在,如果它確實我用require(path)包含該文件。

我遇到的問題是fs.existsSync(path)的相對路徑與require(path)的相對路徑不同。

// I don't understand why the check for file and the require of that file, need slightly different paths 
var developerConfigFile = './gulp-config/' + process.env.NODE_DEV + '.js'; 
var developerConfigFileForRequire = '../gulp-config/' + process.env.NODE_DEV + '.js'; 


if (fs.existsSync(developerConfigFile)) { 
    console.log('Found: ' + developerConfigFile); 
    require(developerConfigFileForRequire); 
} else { 
    console.log('NOT Found: ' + developerConfigFile); 
} 

Gulp require(Path) is Different to fs.existsSync(Path)

回答

1

是的,那是因爲你給fs功能(這只是使用文件系統路徑的任何東西)相對路徑會相對被解釋爲當前工作目錄。鑑於傳遞到require的相對路徑相對於執行require的模塊位於的目錄而言被解釋爲。只有在有限數量的情況下,這兩者纔是平等的。在你的情況下,你當前的工作目錄是你項目樹的頂部,而當gulp/conf.js加載一個具有相對路徑的模塊時,起始目錄是gulp,這就是爲什麼你必須用..開始你的路徑。

注意,可選的負載可以簡化爲這樣的事:

try { 
    require(path_to_module); 
} 
catch (e) { 
    if (e.code !== "MODULE_NOT_FOUND") 
     throw e; 
} 

catchif是讓MODULE_NOT_FOUND被忽略,但其他異常重新拋出。

+0

感謝您的見解@路易斯 –

相關問題