0

私はこのようなことをしたいと思います:

var jsonFileName = aDynamicallyGeneratedJsonFileName(),
    defaultObject = {'my': 'default', 'json': 'object'};

var cachedOrRequiredObject = require(jsonFileName, defaultObject);

存在しない場合cachedOrRequiredObjectに指定したいのですが、require キャッシュが存在しない場合でもキーとして保持されるようにしたいと考えています。defaultObjectjsonFileNamejsonFileNamedefaultObjectjsonFileName

もちろん、これは機能しません。特に、ファイルが見つからない場合はエラーが必要です。私は次のようなことができます:

function myRequire (file, defaultObj) {
   try {
       return require(file);
   catch () {
       return defaultObj;
   }
}

しかし、 を実行するたびにrequire、ファイル システムにアクセスしてfile、存在しない場合に検索しようとします。これを行うには、require の機能を複製して自分のキャッシュを維持するよりも良い方法はありますか?

4

1 に答える 1

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
}
于 2012-09-09T02:08:19.120 に答える