如果存在开发人员特定文件,我想用开发人员特定变量覆盖默认变量。
各种文件的路径如下:
// 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);
}
答案 0 :(得分:1)
是的,因为您提供给fs
函数的相对路径(以及只使用文件系统路径的任何路径)将相对于当前工作目录解释为。传递给require
的相对路径是相对于执行require
的模块所在的目录的解释。只有少数情况下,这两者才是平等的。在您的情况下,您当前的工作目录是项目树的顶部,而当gulp/conf.js
加载具有相对路径的模块时,起始目录为gulp
,这就是您必须开始路径的原因与..
。
请注意,可选加载可以简化为:
try {
require(path_to_module);
}
catch (e) {
if (e.code !== "MODULE_NOT_FOUND")
throw e;
}
if
中的catch
是为了忽略MODULE_NOT_FOUND
,但会重新抛出其他异常。