我剛剛開始使用nodejs。我想知道是否有一種方法可以在應用程序中「僅需要」一次文件。我正在使用一個類框架在我的JS項目中獲得經典的OOPS。每個「類」都包含在它自己的JS文件中。我想在每個文件中「要求」類框架,以便它們可以獨立運行,但希望框架的init代碼只執行一次。有沒有辦法在nodejs中「僅需要」一次JS文件?
我可以使用一個標誌來實現這一點,但內置的方式會很好。搜索「需要一次」會導致我遇到與PHP相關的所有問題。
我剛剛開始使用nodejs。我想知道是否有一種方法可以在應用程序中「僅需要」一次文件。我正在使用一個類框架在我的JS項目中獲得經典的OOPS。每個「類」都包含在它自己的JS文件中。我想在每個文件中「要求」類框架,以便它們可以獨立運行,但希望框架的init代碼只執行一次。有沒有辦法在nodejs中「僅需要」一次JS文件?
我可以使用一個標誌來實現這一點,但內置的方式會很好。搜索「需要一次」會導致我遇到與PHP相關的所有問題。
require
總是「需要一次」。第一次撥打require
之後,require
使用緩存並始終返回相同的對象。
在模塊中浮動的任何可執行代碼只能運行一次。另一方面,如果您確實希望它多次運行初始化代碼,只需將該代碼放入導出的方法中即可。
編輯:閱讀的http://nodejs.org/docs/latest/api/modules.html#modules
的「緩存」一節。如果你真的想要的頂級代碼的模塊中(代碼是不是你的模塊中包含的方法或職責範圍內)執行一次可以多刪除它是在require.cache對象緩存這樣的模塊對象:
delete require.cache[require.resolve('./mymodule.js')];
做到這一點,你需要第二次模塊之前。
大多數時候,儘管您可能只希望模塊的頂級代碼運行一次,而在任何其他時間需要模塊時,您只需要訪問該模塊導出的內容。
var myMod = require("./mymodule.js"); //the first time you require the
//mymodule.js module the top level code gets
//run and you get the module value returned.
var myMod = require("./mymodule.js"); //the second time you require the mymodule.js
//module you will only get the module value
//returned. Obviously the second time you
//require the module it will be in another
//file than the first one you did it in.
太棒了!感謝您的快速回復。 – atlantis
當你說'多次運行初始化代碼時,你可以解釋或給出示例,只需將該代碼導入導出的方法。「# – 2015-10-22 08:58:33
@sudo而不是將代碼留在模塊的主體中,將其放入您導出的函數。然後需要您的模塊的模塊可以執行此功能以重新運行初始化代碼。 例如 '''js var db = connect(); module.exports = DB ''' VS '''JS module.exports =連接 ''' 另一種方式去思考的是:節點模塊總是單身。你的單例可以暴露一個構造函數/工廠來創建實例。 – timoxley