/ / moduły nodejs i powielanie? Jeśli aplikacja używa dwóch modułów, które wymagają wspólnego modułu, czy optymalizuje węzeł, aby zapobiec dwukrotnemu załadowaniu tego samego kodu? - node.js, moduł, duplikacja

moduły nodejs i powielanie? Jeśli aplikacja używa dwóch modułów, które wymagają wspólnego modułu, czy optymalizuje węzeł, aby zapobiec dwukrotnemu załadowaniu tego samego kodu? - node.js, moduł, duplikacja

Przepraszam, jeśli to głupie pytanie, ale jeśli jautworzyć 2 moduły, które wymagają ("http") i mojej głównej aplikacji, która wymaga obu modułów, lub wymaga modułów, które z kolei wymagają obu modułów, a jednocześnie wymagają "http" dla własnych celów, czy mam w efekcie trzy instancje moduł http, z których każdy jest zablokowany w ramach innego zamknięcia, lub czy węzeł przerabia rzeczy, aby tego uniknąć?

Innymi słowy, czy mam w końcu aplikację, która ma:

// 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 ... */ }

Jeśli chcę również używać proxy1 niezależnie, toma sens mieć go jako moduł, ale nawet przy małym projekcie może to prowadzić do wielu modułów, które wszystkie wymagają kilku podstawowych modułów, szczególnie http i fs

Odpowiedzi:

13 dla odpowiedzi nr 1

Przeczytaj, jak ładuje się moduł Node.js buforuje moduły. W twoim przykładzie instancja "http" będzie taka sama we wszystkich twoich modułach.

Ale pamiętaj, że moduły są buforowane na podstawierozwiązana nazwa pliku. Jeśli potrzebujesz wbudowanego modułu takiego jak "http", możesz być pewny, że otrzymujesz ten sam obiekt modułu we wszystkich kodach, ale pakiety innych firm niekoniecznie zachowują się w ten sposób. Na przykład, jeśli potrzebujesz "express" i "mime", obiekt modułu "mime", który otrzymasz, będzie, jak sądzę, różny od tego, który jest użyty wewnątrz ekspresu. własny zestaw plików modułów w jego podkatalogu node_modules, podczas gdy będziesz mieć zainstalowany i załadowany własną kopię, prawdopodobnie w swoim projekcie your_project / node_modules gdzieś