Как стать автором
Поиск
Написать публикацию
Обновить

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

Каждое 3-4 слово не знакомо мне 🤣

Краткий справочник бы закрепил бы куда нибудь что бы аудиторию расширить 😅

Ну тогда это была бы статья "современная сборка JS для самых маленьких", а не "как публиковать npm-пакет" =)

В целом я не против такой статьи, накидывай вопросы!

Согласен со всем вышеизложенным! Свою либу компилирую Тайпскриптом, ставлю таргет ESNext, чтобы не деградировать новые фичи языка, пользователи уже под себя пусть компилят. Если не хотят, то можно брать с CDN которые подтягивают и компилят из npm (с параметрами компиляции). Не забываем файлы деклараций.

С полифилами для библиотек не совсем всё так.

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

НО! Это всё ещё зависимость библиотеки. Если сильно на заморачиваться, довольно серьезно увеличивающая размер бандла. Ну и чистые версии полифилов не могут быть так же хорошо оптимизированы, как глобальные, да и многое в них просто нереализуемо.

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

Век живи век учись, локальные полифиллы действительно можно устроить через core-js-pure + babel-plugin-transform-runtime

Но (вдобавок к вашим):

  1. Наличие core-js и core-js-pure повышает риск дублирования полифилла

  2. Сам core-js-pure таки работает на сайдэффектах с хитрой подменой globalThis, пруф:

Возможно, я упускаю какие-то новейшие методы полифиллинга.

Спасибо за поправку, дополнил статью!

Ну первое я, в том числе, в "Если сильно на заморачиваться, довольно серьезно увеличивающая размер бандла." подразумевал - хотя, всегда можно разрешить core-js-pure как core-js - интерфейс точек входа у них один.

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

мне кажется можно было написать более сжато.
Публиковать ли src? Возможно идет речь про то что мы играемся с нашей библиотекой в src, а папка lib содержит саму библиотеку. Мы же все равно компилируем ts в js? Значит 100% используем dts, поэтому не понятны сомнения автора, или мы должны писать сразу в js. Можно было бы приложить конфиг для tsup к примеру, для создания мелких библиотек он лучше подходит чем vite. Проблемы возникают когда мы используем компоненты от фреймворка и монорепу, где у нас помимо чужих зависимостей, еще свои и фиг знает в каком виде собирать, чтобы удобно было пользоваться.

мне кажется можно было написать более сжато.

Да, тренируюсь потихоньку.

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

Некоторые ребята публикуют и собранную версию (lib / dist), и несобранную (в голом ts / jsx). Думаю, это излишне.

Можно было бы приложить конфиг для tsup

Обяательно будут и конфиги tsup, и vite, и tsc / esbuild / tsdown, но в следующей серии цикла. Пока просто думаем, что именно и почему должны делать эти конфиги.

Значит, минифицировать библиотеки не стоит. Зачем некоторые сборщики библиотек по умолчанию минифицируют код — для меня загадка.

Если в библиотеке на выходе есть форматы подходящие для использования сразу в браузере, то в случае с минификацией это позволяет сразу использовать минифицированные файлы по прямой ссылке с cdn типа unpkg или jsdelivr. Туда же можно докинуть сорсмапы и транспиляцию, которых в этом кейсе у конечного пользователя библиотеки не будет. В таком варианте в конфиге билда будет больше файлов на выходе и к разным файлам будут применяться разный набор инструментов. Получается сложнее, но универсальнее.
С транспиляцией можно выбрать какую то достаточно безопасную версию ES (типа 2020) и транспайлить по дефолту до неё, но параллельно делать версию файлов без транспиляции и указывать её в доках. Тогда если у пользователя библиотеки бандлер по дефолту проигнорит node_modules, то в браузер всё равно попадёт безопасный код, а если пользователь захочет максимально ужать код, то подключит нужные версии файлов и соберёт уже под себя. Но если файлов много, то это возможно не лучшая идея.

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

Публикации