TL;DR
Недавно мне понадобилось установить одну библиотеку (remarkable 2.0.1), но загвоздка была в том, что в проекте имелся другой пакет (назовём его foobar), который тянул более раннюю версию remarkable — 1.7.4. Я мог использовать и старую версию remarkable, но хотел в обозримом будущем избавиться от foobar, поэтому начал искать варианты установить в одном проекте 2 разные версии одного пакета. И я нашёл официальное решение.
Решение
Подробнее можно найти в документации npm: docs.npmjs.com/cli/v8/commands/npm-install (искать по слову «alias»).
Суть в том, чтобы устанавливать пакеты под псевдонимом. Общая схема выглядит так:
npm i <your-alias>@npm:<package-name>
Пример:
npm i remarkable-v2@remarkable@2.0.1
И затем можно импортировать как бы одну библиотеку, но разных версий:
import { RemarkableOld } from 'remarkable'
import { RemarkableNew } from 'remarkable-v2'