Прежде всего, я не настолько опытен в Node.js. Мое понимание модулей Node.js заключалось в том, что они действуют так же, как и модули Python. Я имею в виду выполнение кода только один раз и сохранение внутреннего состояния. Пока я не прочитал this article:Можно ли полагаться на состояние узла node.js?
Но вы не могли бы понять (я уверен, что не сделал!), Что, если ваш проект на основе НПХ модулей, которые оба требуют «общего» модуля как зависимости, как это:
node_modules/one/index.js: var shared = require('shared'); node_modules/two/index.js: var shared = require('shared');
... И установить их зависимости НПМ, будет две копии "общих/index.js" болтался:
node_modules/one/node_modules/shared/index.js node_modules/two/node_modules/shared/index.js
После прочтения я не уверен, что можно полагаться на внутреннее состояние модуля из-за возможности существования одного модуля на разных путях и, следовательно, иметь два или более экземпляров одного и того же модуля в кеше. Это означает, что, по крайней мере, «Больше не существует синглетов с помощью встроенного механизма модулей». Между тем, я не слышал о такой проблеме в Python.
Означает ли это, что почти все модули должны возвращать только функции/конструкторы (например, поток создания приложений express.js
) и избежать внутреннего состояния?
Итак, точка пытается избежать состояний модулей, если проблема двух разных состояний одного и того же модуля является проблемой? И поэтому нужно явно передавать экземпляры между модулями через инъекцию зависимостей во время требования. –
@Ostrovski Я стараюсь избегать инъекции зависимостей, так как это немного волшебство, которое может сбить с толку.Если мне нужно разделить состояние, я пытаюсь либо использовать объект общего состояния, либо какую-то передачу сообщений (шину событий или что-то вроде memcached или redis) - таким образом, у вас больше контроля над ситуацией. – tkone