Comments 4
Вау, бывает же
Разве во всех доках по MF не делают акцень на singleton shared зависимости? Просто как вы оказались в этой ситуации вообще?
Хороший вопрос, пришлось даже перечитать код шеринга внимательнее, чем во время самого инцидента:))
Да, в доках этот акцент есть, и singleton у нас в итоге стоит, правда появился он уже после разбора. Сама же ситуация сложилась буднично — shared‑конфиг писался, когда локатор vue в lockfile был один. Второй появился позже вместе со свежим диапазоном в одном из workspace‑пакетов, а вложенными копии легли потому, что хойстингу в корень мешает пин Vue 2 у легаси‑хоста. Подсветить дубль при этом некому, установка и сборка на него не жалуются, вот он и дожил тихо до первого инцидента.
Singleton же и в теории не про эту засаду, потому что весь его вклад ограничен выбором версии, которую share scope отдаст потребителю. По‑настоящему singleton влияет лишь на случай, когда в scope к моменту резолва уже лежит загруженная версия — тогда он возьмёт её даже при несовпадении диапазона и ограничится предупреждением в консоли, поэтому страница не повиснет, зато приложение получит чужую мажорную версию и вероятно, тихо сломается позже.
От самой засады лечит только отсутствие второй копии, а singleton у нас стоит скорее как страховка, а не как решение.
Вторая копия Vue: как лишняя строка в lockfile повесила Chromium