Как стать автором
Обновить

Комментарии 68

чтобы его могли использовать со статическим подключением (код написан на еsnext с модулями) и в том числе в не самых новых браузерах, обычная практика для библиотек

Это всё конечно хорошо и правильно, но при чём тут гит? Зачем класть бандл в гит?

чтобы его не надо было собирать тем, кому это не надо

Для этого есть npm, CDN и вкладка Releases на гитхабе, а артефакты сборки обычно наоборот прописывают в .gitignore

это иденпотентный бандл, бывает жизнь без нпм и я не хочу делать людям квесты

Вы создаёте людям квест по выковыриванию бандла из гита, нехорошо

когда я вижу библиотеку которую мне надо подключить статически, я первым делом ищу dist/, если его нет я буду пытаться ее собрать или искать другую. Про то что оно может оказаться в npm или cdn мне бы в голову не пришло наверное

Ну вот за явно нетрадиционный подход вы и собираете минусы)

это как раз традиционный подход, ну что поделать, хабр есть хабр он все свои минусы давно собрал

Для этого есть README.md где обычно написано как пользоваться библиотекой. А если не написано, то это повод усомниться в качестве библиотеки.

вы предлагаете в ридми описывать раздербанивание нпм пакета или поиск на сидиэн? а не надо ли мне потом еще будет проверку ссылки на целостность в пре-коммит добавлять?
чтобы что-то делать определенным образом надо понимать почему оно так делается, а не безмозгло копировать подходы у других. В компилируемых языках бинарники действительно не коммитят в репозиторий, потому что они получаются разные для каждой машины и при каждой пересборке возникает неоправданно не закоммиченные файлы. Тут всего этого нет и несколько другая история. Задача этого бандла упростить подключение библиотеки для различных случаев, а не усложнить.

В современном мире, даже минифицированные js-файлы для крупных проектов будут отличаться по своему содержанию. Наличием полифиллов или альтернативных решений.
А еще можно поддерживать React Native, скажем. Там свои нюансы и возможности.


Так что, своим комментарием сами же себя и опровергли

В современном мире, даже минифицированные js-файлы для крупных

поэтому я не минифицирую этот бандл и не включаю в него полифилы. Есть например люди которые делают еще cjs сборку считая, что это им поможет поддерживать большее число архитектур и они точно также складывают их в build/ и dist/. И если вы загляните в node_modules там вероятно большее число пакетов будет иметь такие сборки.

А зря. Первое место, где её следует искать — это вкладка Releases.

я думал на битбакете вообще хоститься сначала

А там что, нет релизов? :-(

есть какой-то Download, зачем мне все эти сложности и привязка к сервису? мне право неудобно еще туда руками каждые 10 килобайт заливать. А потребителю зачем?
и я делаю ее не только для самых успешных и честолюбивых профессионалов хабра, а для любого уровня и привычек разработчика, если вы считаете что в гите чему-то не место это ради бога, но я вижу огромное количество библиотек с готовыми бандлами в репозиториях

Для тех, кто живёт без npm, существует https://unpkg.com/

бывают интранеты без доступа к такому
а как они на гитхаб попадут тогда?

тут могут быть разные способы и регламенты

а как они на гитхаб попадут тогда?

Можно пользуясь случаем срошу? Зачем они вообще должны туда попадать?
Свой сервер для описанных выше задач должен устроить полностью. И поднять его — задача ну максимум на пол часа. Что даст гитхаб кроме пиара?
Но зачем, когда отправить на гитхаб — 5 секунд?

А дальше начинаются соображения всякого дальнего порядка, которые во основном сводятся к тому, что городить свой велосипед — плохо (пока очень четко не понимаешь, зачем тебе этот велосипед нужен), а пользоваться общепринятыми в индустрии инструментами — хорошо.
Ну да. Только это инструмент, над которым нет контроля совершенно. Как вторая точка хранения — вполне, но хоть сколько-то важный проект почему бы не держать на своем оборудовании?
Если уж говорить про 5 сек, то та же GITEA устанавливается почти то же время.

кроме того, сторонний сервис вас может забанить или замедлить и вообще их использование хорошо только для хттп1 а с мультиплексированием хттп2+ скорее пагубно. unpkg это в самый раз для демок на кодепен, но как единственно возможный вариант не годится. Для обеспечения совместимости с разными модульными форматами включение нескольких точек входа это обычная и даже рекомендуемая часто практика.

В npm пакет класть бандл — согласен. А в гит зачем?


Ну и ещё «вопросы»:


  • собирать дебаг или релиз?
  • а если я очень хочу закоммитить поломанный код в какую-то временную ветку? (решил что-то сделать по-другому, но не уверен и хочу сохранить текущий прогресс, например)
  • делать ли full clean перед сборкой? А если бандл собирается с нуля 2 минуты?

этож статья про хук коммита, а не бандлы;)

ну а для нестабильного кода это все нетрудно закомментить

вспомнил ещё одну причину: я часто ставлю версию прямо из мастера (git+https://, git+ssh://) для проверки гипотез и тестирования до публикации. так гораздо проще добавлять и проверять измения и вариант с бандлами только в пакете мне не подходит никак.

Мне эта библиотека кажется странной.
Чтобы запустить что-то (не обсуждая, что) перед коммитом, думаю лучше использовать husky, потому что там есть и другие гитовые хуки, которые смогу понадобиться со временем.

если бы я впервые увидел код package.json и захотел понять почему перед коммитом что-то происходит само по себе, мне была бы понятнее секция pre-commit чем новое слово на букву ху:) кроме того там явно больше движений с этим ручным запуском инсталла. Что касается других хуков, то у пре-коммит есть компаньены: www.npmjs.com/package/post-commit
у husky вы тоже самое можете увидеть в package.json, но это более живой и полный инструмент чем тот, на который ссылаетесь вы
мне была бы понятнее секция pre-commit чем новое слово на букву ху:)

ну я не сцу кипятком от слова CI… но у меня и без этого все работает довольно быстро с этой библиотекой даже на стареньком ноуте.
это более чем характеризует вас, как спеца. И где «вы такие» беретесь только )))

Вот бы мне на интервью кто то отмочил подобное, но к сожалению такие клоуны профессионалы не попадаются ((

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

договаривайте, что бы было если бы «отмочил», а то я не понял намёка

А почему бы для этого не использовать CI? Чтобы сэкономить своё время/головную боль с хуками, и это проще масштабируется на несколько разработчиков
(вот мой недавний пример: https://github.com/materializecss/materialize, тут dist на много коммитов отстал от кода)


Сейчас существует достаточно cloud CI, вам даже ничего поднимать не нужно, только настроить аккаунт один раз


когда я вижу библиотеку которую мне надо подключить статически, я первым делом ищу dist/, если его нет я буду пытаться ее собрать или искать другую

Я честно говоря не знаю, как "принято" в нпм мире, но мне кажется более логичным использовать для этого как минимум GitHub releases (или нечто подобное). Хотя логичнее всего выглядит npmjs или какие другие репозитории
И, в моём скромном опыте, для подключения npm библиотеки из гитхаба, дист не нужен, нпм может подхватывать по прямой гитхаб ссылке

зачем с CI или там CDN если можно без него? 8 килобайт бандла не стоят этих всех движений.

И, в моём скромном опыте, для подключения npm библиотеки из гитхаба


можно подключать ее как esm модуль, можно статически, я сделал оба варианта чтобы она подходила для всех случаев. Например на какой-нибудь жуткий вордпрес шаблон или что-то такое.

Полезность CI не зависит от размера бандла.

это само собой, но для таких условий это как из пушки по воробьям по-моему, впрочем я может ради плашки посмотрю в эту сторону, но dist/ пожалуй оставлю для совместимости хотя бы с теми кто привык думать и действовать также как я:)

Я рад, что вы решили попробовать )
Вот пример, как из трависа сделать коммит в гитхаб обратно:
https://gist.github.com/willprice/e07efd73fb7f13f917ea


Разумеется, на изначальную настройку и изучение Travis (или любого другого CI, который вы решите попробовать) вам понадобится время. Но изучение новой технологии всегда полезно и пригодится в будущем
Но в целом ваш финальный CI файл может выглядеть примерно так:


dist: bionic
language: node_js
node_js:
  - '15'
script:
  - npx rollup --config rollup.config.js
after_success:
  - .travis/push.sh
env:
  global:
    secure: YOUR_ENCRYPTED_GITHUB_KEY

Как по мне, это не "из пушки по воробьям", а вполне себе лаконично

…то там есть свой CI

ну я не сцу кипятком от слова CI потому, что вижу их много разных и уже довольно давно, для большого и многокомпонентного проекта и команды безусловно это полезно, но у меня и без этого все работает довольно быстро с этой библиотекой даже на стареньком ноуте. А вдруг у этого трависа в лицензии мелким подчерком написано, что (бесплатное) использование его означает передачу всех прав на собранное микрософту;)? Вот сегодня я поймал от них уведомление, что они скоро отключат пароли. А завтра введут плату за CI или еще что-нибудь сломают.
А уже не важно. Дальше «минусаторы» будут объяснять почему нужно сломать то что работает, объясняя, что оно работает неправильно и все остальные делают по другому.
чета какое-то обострение у них, впрочем они давно порывались мне аккаунт слить несмотря на то, что я уже и в дискуссиях не участвую тут из-за таких вот идиотов, видимо невыносима жизнь красноглазая микрософто-пхпшная, что нельзя пройти мимо или признать, что кто-то другой прав;)
Ну грубость никогда уместной не будет в диспутах, так что фильтровать все же стоит.
В остальном, я сторонник того, что номером первым всегда должен идти результат. Если результат есть, тогда можно уже обсуждать недостатки процесса. Если же переделка процесса выльется в отстутствие результата — это уже теоретический спор ради спора, а не что-то нужное в реальной жизни.
агрументировать толпой это и есть грубость недостойная уважительного или даже учтивого обращения

Честно говоря, мой посыл был в другом: мне хочется, чтобы начинающие разработчики, прочитав эту статью, прочитали и мой комментарий. И вместо того, чтобы городить свой огород с хуками и локальными решениями, использовали более популярные стандарты. Это облегчает работу другим разработчикам (и даже себе будущему)


Если у автора всё работает, он всё делает с одного компа, и никто его код трогать не будет, то решение себя оправдывает. Конечно, ничего переделывать не нужно.


Но, возможно, задуматься о более подходящих инструментах для новых проектов. Если их использование не сопряжено с чрезмерными трудностями.


ПС "я не сцу кипятком от слова CI" тоже. Для меня CI = автоматизация, и вот она действительно важна. Решение с хуками, как по мне, это недо-автоматизация.


ППС я тоже начинал с ручных поделок и хуков (да и сейчас они есть). Но единственная причина их иметь, как по мне, это лень и чрезмерное количество свободного времени, чтобы тратить его вручную

это заметка не про CI, а про хуки, использование которых может может сильно облегчать жизнь разработчикам. В моей постановке примера использования было требование иметь соответствие кода бандла и исходников в рамках одного коммита без зависимости от человеческого фактора. Если бы я использовал CI это было бы снова 2 разных коммита. Я тоже восновном не пользуюсь хуками, т.к. они лежат где-то далеко и не надежно (ну или не прозрачно) по моим ощущениям, но в package.json они меня теперь вполне устраивают.
не мучиться потом с rebase каждый раз

А какие с ним мучения? Интерактивный ребейз, удобный редактор и как бы всё — история ветки получается красивой и логичной, а не 100500 тупых коммитов о метании мысли, забывчивости, мёрдже мастера из оригин мастера и прочего треша.


Хотя ваш подход хранения артефактов в гите сомнителен.

с ребейзом тоже надо вовремя вспомнить, что ты не собрал бандл. Артефакты это упакованные бинарники в джаве, а не специальная версия для совместимости.

Теперь прямо перед коммитом сразу собирается бандл и добавляется в коммит.
о_О кто то реально использует такое на практике? А что делать, если бандл пару сот мегабайт или пару гигабайт? Чем не устроило хранение бандлов/артефактов в том же Artifactory?

он будет в браузер загружен, если вы туда пару гигабайт готовите, это и в самом деле проблема

он будет в браузер загружен
кто он?

В общем, вы выдумали жесточайший велосипед с квадратными колесами, у которого очень узкий и специфический круг применения.

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

Это клиника )))

да хоть хоспис, вы занимайтесь друг дружкой и не лезьте к нормальным людям

и конечно бандл это не всегда артефакт, мой код не надо компилировать, чтобы он заработал. Вам тайпскрипт и SPA совсем мозги зафимозили похоже.

Не могу найти в комментарии, на который вы отвечали, слово "компиляция" или однокоренные с ним. Кажется, это вам тайпскрипт и SPA "мозги зафимозили", только в другую сторону — в любом комментарии вы почему-то видите намёк на них...

артефакт подразумевает бинарник, который надо компилировать из исходника и деплоить. У меня ничего такого нет библиотека подключается прямо в браузерной вёрстке как есть из бандла или как модуль в вашем коде где вы можете самостоятельно городить CI и что вам там вздумается

Артефакт подразумевает любой результат сборки (а построение бандла — тоже сборка), который надо деплоить (а копирование в директорию веб-сервера — тоже деплой).

это сборка не бинарника, а версии для другой модульной системы

И что от этого меняется?

ничего, вы так и остаетесь злокозненными долбае-ами

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории