簡體   English   中英

按需require()

[英]On-demand require()

假設我在./libname創建一個庫,其中包含一個主文件: main.js和多個可選庫文件,這些文件有時與主對象一起使用: a.jsb.js

我使用以下命令創建index.js文件:

exports.MainClass = require('main.js').MainClass; // shortcut
exports.a = require('a');
exports.b = require('b');

現在,我可以如下使用庫:

var lib = require('./libname');
lib.MainClass;
lib.a.Something; // Here I need the optional utility object
lib.b.SomeOtherThing;

但是,這意味着,我總是加載“ a.js”和“ b.js”,而不是在我真正需要它們時加載。

當然,我可以使用require('./libname/a.js')手動加載可選模塊,但隨后我丟失了漂亮的lib.a點符號:)

有沒有一種方法可以用某種索引文件實現按需加載? 也許,一些package.json魔術可以在這里正常播放?

如果您調用“ MainClass”來按需動態加載其他模塊,則可能會這樣做。 但是我懷疑這也將意味着對api的調整以訪問該模塊。

我想您的動機是“避免”“不需要的模塊”使用的額外處理。 但是請記住,Node是單線程的,因此加載模塊的內存占用不是每個連接而是每個進程。 一次性加載模塊即可將其存入內存。

換句話說,只有在您啟動服務器時才加載模塊,而不是每次有人提出請求時才加載模塊。

我認為您是從客戶端編程看的,在需要保存處理和/或http請求的情況下,加載腳本的優點是它的優勢。

在服務器上,您最多可以節省的內存很少。

看起來唯一的方法是使用吸氣劑。 簡而言之,像這樣:

exports = {
    MainClass : require('main.js').MainClass,
    get a(){ return require('./a.js'); },
    get b(){ return require('./a.js'); }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM