По умолчанию, когда я использую NPM для управления пакетом в зависимости от foo и bar, оба из которых зависят от corelib, по умолчанию NPM будет устанавливать corelib дважды (один раз для foo и один раз для bar). Они могут быть даже разными версиями.
Теперь предположим, что corelib определил некоторую структуру данных (например, объект URL), которая передается между foo, bar и основным приложением. Теперь, что бы я ожидал, это если бы имелось когда-либо обратно несовместимое изменение этого объекта (например, одно из названий полей было изменено), а foo зависело от corelib-1.0 и bar зависело от corelib-2.0, я был бы очень sad panda: версия bar corelib-2.0 может отображаться в структуре данных, созданной старой версией corelib-1.0, и все будет работать не очень хорошо.
Я был очень удивлен, обнаружив, что эта ситуация в принципе никогда не бывает (я трал Google, Qaru и т.д., ища примеры людей, чьи приложения перестали работать, но кто мог бы исправить это, запустив dedupe.) Итак, мой вопрос is почему это так? Является ли это потому, что библиотеки node.js никогда не определяют структуры данных, которые совместно используются вне программ? Это потому, что разработчики node.js никогда не нарушают совместимость своих структур данных? Я действительно хотел бы знать!