我想做这样的事情:
var jsonFileName = aDynamicallyGeneratedJsonFileName(),
defaultObject = {'my': 'default', 'json': 'object'};
var cachedOrRequiredObject = require(jsonFileName, defaultObject);
如果cachedOrRequiredObject
不存在,我希望defaultObject
获得jsonFileName
,并且我希望require cache保留jsonFileName
作为关键字defaultObject
,即使jsonFileName
不存在。
当然这不起作用 - 特别是在找不到文件时需要出错。我可以做类似的事情:
function myRequire (file, defaultObj) {
try {
return require(file);
catch () {
return defaultObj;
}
}
但require
的每次执行都会触及文件系统,以便在它不存在时尝试查找file
。有没有比这更好的方法来复制需求的功能并维护自己的缓存?
答案 0 :(得分:2)
您必须为不存在的文件维护自己的缓存,require
没有理由这样做。一个非常简单的对象缓存就足够了(这是require()内部使用的):
function requireWithDefault(path, default){
var module
if ((module = requireCache[path]) === undefined){
try {
module = require(path)
} catch(e) {
module = requireCache[path] = default
}
}
return module
}