/ / nodejs модули и дублиране? Ако приложението използва два модула, които изискват общ модул, оптимизира ли възела, за да предотврати зареждането на същия код два пъти? - node.js, модул, дублиране

nodejs модули и дублиране? Ако дадено приложение използва два модула, които изискват общ модул, оптимизира ли се възелът, за да предотврати натоварването на същия код два пъти? - node.js, модул, дублиране

Извинявам се, ако това е тъп въпрос, но ако азсъздайте 2 модула, които изискват ("http") и главното ми приложение, което изисква и двата модула, или изисква модули, които от своя страна изискват и двата модула, като същевременно изискват "http" за собствените си цели, да свърша с три копия HTTP модул, всеки заключен в рамките на различно затваряне, или възел пренапише неща, за да се избегне това?

С други думи, да завърша с приложение, което има:

// main app  creates a closure containing a local instance of http, an instance of proxy1
// and an instance of proxy2, both of which are functions returned from closures that have instances of http in scope
var http = require("http"),
httpProxy1 = require("./proxy1"),
httpProxy2 = require("./proxy2");

/* ... do stuff with http, using proxy1 or proxy2 where appropriate ... */


// proxy1 creates a closure containing a local instance of http and exposes a single public method
var http = require("http");
module.exports = function (foo) { /* ... do stuff with http ... */ }

// proxy2  creates a closure containing a local instance of http and exposes a single public method
var http = require("http");
module.exports = function (foo) { /* ... do stuff with http that has nothing to do with the stuff proxy1 does ... */ }

Ако аз също искам да използвам proxy1 самостоятелно, тойима смисъл да го има като модул, но дори и на малък проект, това може да доведе до много модули, които изискват многократно основни модули, особено http и fs

Отговори:

13 за отговор № 1

Прочетете как се зарежда модулът Node.js кеш модули, В примера ви „http“ ще бъде еднакъв във всичките ви модули.

Но имайте предвид, че модулите са кеширани въз основа наразрешено име на файл. Когато се изисква вграден модул като "http", може да сте сигурни, че получавате същия модулен обект в целия код. Например, ако имате нужда от "express" и "mime", обектът на "mime" модула, който получавате, ще бъде различен от този, който се използва в експрес. собствен набор от модулни файлове в неговата поддиректория "node_modules", докато вие ще имате инсталиран и зареден собствен екземпляр, вероятно във вашите.