node.js - Gulp require(Path) 与 fs.existsSync(Path) 不同

标签 node.js gulp

如果存在开发人员特定文件,我想用开发人员特定变量覆盖默认变量。

各个文件的路径如下:

// 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)

最佳答案

是的,这是因为您提供给 fs 函数(以及任何仅使用文件系统路径的内容)的相对路径将被解释为相对于当前工作目录。而传递给 require 的相对路径则被解释为相对于执行 require 的模块所在的目录。仅在有限的情况下两者才会相等。在您的情况下,您当前的工作目录是项目树的顶部,而当 gulp/conf.js 加载具有相对路径的模块时,起始目录是 gulp,这就是为什么您必须以 .. 开始您的路径。

请注意,可选加载可以简化为如下所示:

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

catch 中的 if 会忽略 MODULE_NOT_FOUND,但会重新抛出其他异常。

关于node.js - Gulp require(Path) 与 fs.existsSync(Path) 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34055422/

相关文章:

javascript - 如何用 Jest 测试 ASYNC 请求的顺序

javascript - 使用具有多个搜索条件的 Knex.js 和 SQL 的条件过滤器

apache - Node.js 事件循环 - nginx/apache

javascript - 找不到模块 'gulp-watch' 错误抛出

javascript - Gulp图像优化破坏图像

css - gulp-recess 不会改变属性顺序

javascript - -- Node v4.x 中的 prof?

node.js - Azure 函数和 Node.js

gulp - gulp 本地版本和 CLI 版本不匹配

node.js - Uglify Minify 并使用 Gulp 生成 source map