检查文件是否存在(区分大小写)

Pat*_*ney 1 operating-system case-sensitive node.js

有没有办法检查NodeJS中是否存在文件,区分大小写,即使底层文件系统不区分大小写

fs.exists()可能会也可能不区分大小写,具体取决于底层文件系统.

 fs = require('fs');
 fs.existsSync('readme.txt') // true
 fs.existsSync('README.TXT') // false (or true, depending on the file system)
Run Code Online (Sandbox Code Playgroud)

在不区分大小写的开发环境中开发应用程序时,这会导致问题,该开发环境将部署在区分大小写的服务器上.我最近遇到了一个问题,即构建被打破了.它在当地工作.

如果我可以让Node告诉我,"是的,README.TXT存在,它存储为readme.txt"将足以解决问题.

Pat*_*ney 7

根据Andrey的建议,我实现了一个使用readdir的函数.

var fs = require('fs');
var path = require('path');

function fileExistsWithCaseSync(filepath) {
    var dir = path.dirname(filepath);
    if (dir === '/' || dir === '.') return true;
    var filenames = fs.readdirSync(dir);
    if (filenames.indexOf(path.basename(filepath)) === -1) {
        return false;
    }
    return fileExistsWithCaseSync(dir);
}

console.log(fileExistsWithCaseSync(__dirname + '/README.txt')) // false
console.log(fileExistsWithCaseSync(__dirname + '/readme.txt')) // true
Run Code Online (Sandbox Code Playgroud)

我不会在生产中使用此函数,因为每次调用都会对文件系统进行多次同步访问.但它足以满足我的需求:防止我的本地开发服务器Foo.js在实际调用文件时服务foo.js(在生产中不起作用).