Pull to refresh

Comments 26

Слышал, но она про монорепозиторий с кучей пакетов и управление им, это частный случай, а я решал общий. Да и в целом, она про цикл выпуска монорепозитория.

Дополню.


Lerna — это про монорепозиторий, притом ещё с определёнными ограничениями, результат её работы банальный симлинк на папку в проекте, а это значит, что prepublish у таких пакетов использовать нельзя, код должен работать «как есть».


Кроме этого, lerna не позволяет залинковать произвольный пакет в зависимостях, она работает только со «своими».


npmy же в свою очередь позволяет подменить любую зависимость и направить её в любое место на диске, но не просто на исходники, а именно на псевдо-опубликованную версию.

Какие только костыли люди не придумают для своего псевдо удобства

А в чём костыльность, если не секрет?

Разрабатываю около 20 пакетов… все стоит тупо и работает
причем есть несколько корневых. Разрабатывается и на TS и на JS.и бекэнд и фронт
node_modules просто симлинк на папку с зависимостями
Все правится на живую и тестируется. Для тестирование сборки есть CI
Всякими псевдоскриптами потом только усложняется развертывание места разработчика.
node_modules просто симлинк на папку с зависимостями

Я в начале написал, что симлинки не спасают, если у вас есть цикл публикации, например esnext в es5, никакой симлинк не спасёт, потому что ./index.js, нужно перезаписать в тот же ./index.js.


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

Они усложняют ровно так же, как и создание симлинка, только в отличии от вашего способа, мне не нужно делать это руками, достаточно запустить npmy и он сделает это за меня, да так, что результат будет идентичен работе npm install.


Кроме этого, как я и написал, если у вас нет сложного цикла публикации, симлинк вполне решение, хотя у него есть ограничения, например с dependencies, которые должны быть установлены не node_modules разрабатываемого пакета, а именно в пакет, который использует эту зависимость. При симлинке такие манипуляции приходиться делать руками.

Как раз цикл публикации не прост. Просто цикл публикации никак не мешает работать в симлинках.
Есть пакеты, которые используют одновременно разные версии одного пакета, все решаемо и все работает. А вот npmy вопрос не взбрыкнет ли где-нибудь на неучтенной конфигурации. Для всех разработчиков не сделаешь универсальный инструмент, я это понял когда стал разбираться с angular/cli. Для быстрого старта очень даже решение, но чуть в сторону начинаются танцы с бубном. Поэтому лучше разобраться с процессом и написать свой велосипед, благо это не так сложно
Просто цикл публикации никак не мешает работать в симлинках.

Если только вам надо esnext в es3 или другой сложной генерации с подменой исходников.


Для всех разработчиков не сделаешь универсальный инструмент

Ну я же сделал :]


P.S. Вы можете не верить, но этот инструмент, создан именно по причине его отсутствия. Для простых пойдёт обычный симлинк, npm link для более сложных (если нужны dependencies), Lerna поможет с монорепозиторием, а для всего остального npmy ;]

Какое счастье, что мне достаточно просто симлинка. Статья весёлая и хуки интересные)

А если учесть все проблемы с «на какой же хук собрать проект», то совсем хорошо :]
npm-разработчики те ещё молодцы, будем надеяться, что в следующей версии они ничего не сломают ;]

Интересно, а вместе с Yarn полетит, или npm-only?

Ни я, ни в компании, мы не используем Yarn, поэтому, да, npm-only.

Это правильно, прыгание по разным пакетным менеджерам создает больше проблем.
Вообще Yarn с своим приростом скоростью (которая уже не значительна для NPM 5) был просто хайп.
Он был еще более менее адекватен для систем сборки, чтобы ускорить установку зависимостей.
Но для места разработчика и прочих применений профит дутого яйца не стоит. Как будто я сижу каждые пять минут обновляют зависимости. Разработчик это делает ну раз в день, а то и в неделю. И подождать 1-3 минуты как бы не особо проблема. Можно чай попить )

Больше скажу, мы проблему решили ещё до появления Yarn, прикрутив локальный registry и спец кэширование, которое запускается npm install и достаёт пакеты из локального кеша. Т.е. не нужно изобретать целый пакетный менеджер, чтобы заставить NPM работать быстро, а теперь и подавно ;]

Ну у меня тоже локальный registry есть и кэш на CI не чистится, поэтому все довольно шустро.
А самый тяжелый сборочный модуль, вообще не ставится а просто линкуется из глобальных.
Поэтому таких проблем вообще не испытывал. Хотя npm 5 все равно немного поломал… Но в принципе все решаемо и довольно несложно. Сейчас все и на npm 5.3 прекрасно работает, единственное бесит что он с линкованными пакетами пока очень плохо работает https://github.com/npm/npm/issues/16788

Вот и я об этом, Yarn в целом не про скорость был, хоть это и была одна из фитч, но главное для них было быстрый shrinkwrap и lock-файл, зачем это обычным разрабам, для меня загадка.

Эээ, но вот почему-то в моей работе нет такого кейса, как массовое обновление, обычно это очень обдуманный и точечный процесс на конкретную версию, а не просто up до последней.

В свежем проекте где на ходу принимаются решения и устанавливаются и удаляются пакеты это очень критично
Плюс это позволяет приятно экспериментировать, создал папку, быстро поставил что нужно, попробовал, удалил
npm v5 решил эту проблемы, но последние полгода до его выхода pnpm и yarn решали

Вот и всё, что мне нужно для щастья:


yarn add --dev file:path/to/your/custom/package

А в чём счастье? Это даже не link, а просто установка из локальной папки, прикольно, но бесполезно.

Добавить поддержку будет очень легко в силу того что они практически совместимы

Спасибо, как раз искал такой инструмент, который локально имитирует публикацию ("публикует" в локальную папку, из которой можно затем "установить" собранный пакет).

привет с 2020го
инструкция как использовать — не понятная.
Зашел в либу, которую хочу линковать. Сделал все по этой инструкции github.com/artifact-project/npmy#npm-link
А как теперь подключить линкованую либу в проект?

Подумал, что возможно это нужно делать с проекта (есть же в пункте 1 строка `cd path/to/project`), в общем не ясно что делать.
Можете уточнить пошагово?

У меня в либе нет ничего сложного, просто есть в скриптах `«prepare»: «npm run build»`. Либа ставится с гитхаба по урлу, и автоматом билдит папку dist откуда в дальнейшем и берет код.
Надеюсь на помощь. Спасибо!
Sign up to leave a comment.