2015-12-02 63 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

感谢您的见解@路易斯 –

相关问题