是否有一种方法可以检查NodeJS中是否存在区分大小写的文件,即使底层文件系统不区分大小写。
根据基础文件系统的不同,fs.exists()可能区分大小写,也可能不区分大小写。
fs = require('fs');
fs.existsSync('readme.txt') // true
fs.existsSync('README.TXT') // false (or true, depending on the file system)这会在将部署到区分大小写的服务器上的不区分大小写的开发环境上开发应用程序时产生问题。最近,我遇到了一个问题,在这个问题上,构建被一个错误打破了。在当地起作用了。
如果我能让Node告诉我,“是的,README.TXT存在,并且它被存储为readme.txt”,这就足够解决问题了。
发布于 2019-01-04 09:23:33
因为我不能评论< 50代表,所以我会做一个新的职位。
@patrik的解决方案运行良好,除了在windows上,因为根检查
我把它改为如下:
function fileExistsWithCaseSync (filepath) {
var dir = path.dirname(filepath)
if (dir === path.dirname(dir)) {
return true
}
var filenames = fs.readdirSync(dir)
if (filenames.indexOf(path.basename(filepath)) === -1) {
return false
}
return fileExistsWithCaseSync(dir)
}发布于 2014-12-09 15:36:11
按照安德烈的建议,我实现了一个使用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我不会在生产中使用这个函数,因为每个调用都会对文件系统进行几次同步访问。但是它足够满足我的需要:当文件实际上名为Foo.js (在生产中不能工作)时,阻止本地开发服务器为foo.js提供服务。
https://stackoverflow.com/questions/27367261
复制相似问题