2012-09-09 141 views
0

我願做這樣的事情:有沒有辦法將一個默認對象傳遞給nodejs中的require?

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

var cachedOrRequiredObject = require(jsonFileName, defaultObject); 

我想爲cachedOrRequiredObject給予defaultObject如果jsonFileName不存在了,我想爲需要高速緩存保持jsonFileName作爲重點defaultObject即使jsonFileName不存在。

當然這不起作用 - 特別是當它找不到文件時需要錯誤。我可以這樣做:

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

require每次執行時會打文件系統,試圖找到file當它不存在。有沒有更好的方式來做到這一點,以便重複需求的功能和維護我自己的緩存?

回答

2

您必須爲不存在的文件維護自己的緩存,require沒有理由這樣做。一個非常簡單的對象緩存就足夠了(這是內部要求使用的):

function requireWithDefault(path, default){ 
    var module 
    if ((module = requireCache[path]) === undefined){ 
     try { 
      module = require(path) 
     } catch(e) { 
      module = requireCache[path] = default 
     } 
    } 
    return module 
} 
+0

謝謝,我希望有更多內置的東西,但這並不壞。 – mjhm

相關問題