2015-03-25 4 views
0

Прошу прощения, если мои вопросы наивны. В полном раскрытии я относительно новичок в Node.JS и JavaScript в целом. Я надеюсь, что кто-то может пролить свет на то, как Node.JS обрабатывает повторяющиеся, возможно транзитивные зависимости? Даже в том, что касается глобального пространства имен или каких-либо конфликтов, или разных версий одного и того же модуля (например, v0.1 vs v0.2 в другом месте вашего приложения), но более вероятно, что это будет разумно и эффективно, когда это возможно. Например:Как Node.JS обрабатывает повторяющиеся транзитивные зависимости?

  • Есть ли вероятность, что Узел достаточно умен в плане следа, чтобы не иметь нескольких копий одной и той же точной версии библиотеки в папке с вашими модулями? Что-то вроде 1 копии для каждой требуемой версии с символическими ссылками или что-то подобное, указывающее на этот код для каждого модуля, который зависит от этой версии этого модуля?
  • Что касается загрузки дублирующих модулей в память во время выполнения? Если v0.1 модуля x уже загружен в память, если какой-то другой зависит от модуля, который требует той же версии этого модуля, будет ли код загружен в память или будет достаточно Узел, чтобы увидеть, что этот код уже загружен и повторно используется? Как изолированный узел является узлом в этом отношении?

Спасибо!

+0

Обычно для предотвращения конфликтов версий используются отдельные копии. – dandavis

ответ

1

Node.js не имеет понятия версий. Функция require() разрешает свой аргумент на полный путь к файлу .js и кэширует их по имени файла.

Возможно, вы спрашиваете, как npm устанавливает модули; это зависит от того, в каком порядке вы их устанавливаете.

Вы можете запустить npm dedup, чтобы делать приятные вещи здесь.

+0

Правильно ли я понимаю, что я могу ожидать, что мои прямые зависимости будут иметь свои собственные пути к каждому модулю, который они транзитивно требуют, и это версия, которая будет загружена? Я понимаю, что дедупе не поможет? – fogwolf

+0

'npm dedup' будет удалять дубликаты, если версии совместимы. Создаются ли они в первую очередь, зависит от порядка установки. – SLaks

+0

Означает ли это, что «npm install» выполняет свою задачу, если какая-либо из ваших зависимостей имеет вложенную зависимость от того, что установка уже прошла, тогда любые требовательные утверждения для этого модуля затем указывают на тот, который уже установлен? И что dedupe тогда в основном делает то же самое, если есть дубликаты? – fogwolf

Смежные вопросы