Возможно идет речь про то что мы играемся с нашей библиотекой в src, а папка lib содержит саму библиотеку
Некоторые ребята публикуют и собранную версию (lib / dist), и несобранную (в голом ts / jsx). Думаю, это излишне.
Можно было бы приложить конфиг для tsup
Обяательно будут и конфиги tsup, и vite, и tsc / esbuild / tsdown, но в следующей серии цикла. Пока просто думаем, что именно и почему должны делать эти конфиги.
А это сложный момент, вот например сложно сказать что postcss — плохая библиотека. Там CJS не доставляет проблем, вот его и не трогают. Выглядит хорошим решением!
В 2021 было довольно отчаянным рубить cjs, сейчас более отчаянно — сидеть на post-EOL node с потенциалом уязвимостей.
Для новых библиотек стратегия "esm-only до первой жалобы" кажется адекватной, меньше заморочек для запуска MVP. Да, есть внешние инстументы с проблемами ESM (jest / TS / express), но непонятно, какая доля проектов на активной поддержке сидит на проблемных версиях. Например, для TS это как раз похоже на 10–12%
В любом случае, я даю информацию, решает каждый сам) Например, часто esm можно оторвать для внутренних библиотек, где мы точно знаем все версии nodejs и форматы кода наших проектов.
Когда я приступал к статье, у меня было смутное воспоминание что в приватном режиме сафари localStorage отключен, но к счастью эту фичу убрали еще в сафари 11
Кейс с явным полным отключением localStorage точно нишевый уровня "пользователь отключил js" и покрывается фолбеком аналогично SSR (единственное отличие — в firefox при этом localStorage === null, а не is not defined)
Зависит от кейса, но по дефолту скорее нет чем да — там замороченное (и довольно мерзкое) асинхронное апи + технология менее популярная. Для offline-first приложения попробовать стоит, для настроек / баннеров / кеша лучше не надо.
Миграцией я все таки называю преобразование старых форматов в свежий с сохранением данных (возможно, формально я не прав). Так я один раз упарывался, не понравилось, тк нарастает большая борода конвертаций которые умеют кушать все-все исторические форматы.
Раз мы всегда умеем работать с кейсом "в сторадже пусто", то проще свести кейс "кривые данные" к нему небольшой валидацией. Если это попадает в ваш концепт миграции, то можем называть это так =)
Если подойти к вопросу серьезно, то дело уже попахивает миграциями. Но я все таки пришел к выводу что если состояние стораджа нельзя безболезненно выкинуть и пересоздать заново, то в 95% кейсов мы выбрали неправильный инструмент (за исключением всякой offline-first экзотики)
Пока никак =) На слое данных это не проблема, в arquero есть полный комплект джойнов, но много интерфейсной работы (переключение таблиц, мульти-табличные пайплайны и всё такое). Задача в топе на развитие.
В спецификации со времён ES6 есть специальное поручение (12.14.4.1.e.iii) в такой ситуации доставать name функции из имени переменной (и из многих других мест, ищется по SetFunctionName).
И это легко проверить
А в минифицированном коде имена и функций, и переменных, обфусцируются и ориентироваться в любом случае придется по line:column
Предпочитать любые библиотеки по любому критерию, разумеется, базовое право каждого человека.
Мне второй раз предъявляют за map, но мне нравится это название — отображение же! (возможно, конформные отображения сломали мне мозг) В голом JS под map подразумевается не только то, что вы подумали, но еще и ассоциативный массив Map. В TS есть mapped types, который совсем не про массивы. В rx есть map, и ничего, как-то живут. В общем, если подойти достаточно абстрактно, всё есть map)
size-limit конечно лучше чем жать голый UMD, но мы всё ещё измеряем один бандл, а не разницу с пустым приложением, так что EOCD и непрогретый gzip остаются. К тому же завязка на вебпак, который инжектит свой рантайм — я что-то уже не хочу к нему приближаться вообще
Век живи век учись, локальные полифиллы действительно можно устроить через core-js-pure + babel-plugin-transform-runtime
Но (вдобавок к вашим):
Наличие core-js и core-js-pure повышает риск дублирования полифилла
Сам core-js-pure таки работает на сайдэффектах с хитрой подменой globalThis, пруф:
Возможно, я упускаю какие-то новейшие методы полифиллинга.
Спасибо за поправку, дополнил статью!
Да, тренируюсь потихоньку.
Некоторые ребята публикуют и собранную версию (lib / dist), и несобранную (в голом ts / jsx). Думаю, это излишне.
Обяательно будут и конфиги tsup, и vite, и tsc / esbuild / tsdown, но в следующей серии цикла. Пока просто думаем, что именно и почему должны делать эти конфиги.
Ну тогда это была бы статья "современная сборка JS для самых маленьких", а не "как публиковать npm-пакет" =)
В целом я не против такой статьи, накидывай вопросы!
А это сложный момент, вот например сложно сказать что postcss — плохая библиотека. Там CJS не доставляет проблем, вот его и не трогают. Выглядит хорошим решением!
В 2021 было довольно отчаянным рубить cjs, сейчас более отчаянно — сидеть на post-EOL node с потенциалом уязвимостей.
Для новых библиотек стратегия "esm-only до первой жалобы" кажется адекватной, меньше заморочек для запуска MVP. Да, есть внешние инстументы с проблемами ESM (jest / TS / express), но непонятно, какая доля проектов на активной поддержке сидит на проблемных версиях. Например, для TS это как раз похоже на 10–12%
В любом случае, я даю информацию, решает каждый сам) Например, часто esm можно оторвать для внутренних библиотек, где мы точно знаем все версии nodejs и форматы кода наших проектов.
Когда я приступал к статье, у меня было смутное воспоминание что в приватном режиме сафари localStorage отключен, но к счастью эту фичу убрали еще в сафари 11
Кейс с явным полным отключением localStorage точно нишевый уровня "пользователь отключил js" и покрывается фолбеком аналогично SSR (единственное отличие — в firefox при этом localStorage === null, а не is not defined)
Спасибо, хороший пойнт!
Вряд ли стоит об этом сильно переживать, там очень хорошая поддержка https://caniuse.com/?search=localstorage
Зависит от кейса, но по дефолту скорее нет чем да — там замороченное (и довольно мерзкое) асинхронное апи + технология менее популярная. Для offline-first приложения попробовать стоит, для настроек / баннеров / кеша лучше не надо.
Миграцией я все таки называю преобразование старых форматов в свежий с сохранением данных (возможно, формально я не прав). Так я один раз упарывался, не понравилось, тк нарастает большая борода конвертаций которые умеют кушать все-все исторические форматы.
Раз мы всегда умеем работать с кейсом "в сторадже пусто", то проще свести кейс "кривые данные" к нему небольшой валидацией. Если это попадает в ваш концепт миграции, то можем называть это так =)
Если подойти к вопросу серьезно, то дело уже попахивает миграциями. Но я все таки пришел к выводу что если состояние стораджа нельзя безболезненно выкинуть и пересоздать заново, то в 95% кейсов мы выбрали неправильный инструмент (за исключением всякой offline-first экзотики)
Ну или хотя бы среднего и полезного) Спасибо!
Хмм, на самом деле не думал про BI системы для этой задачи! Тогда сегментируемся так, hippotable:
Просто использовать: просто открываешь файл и работаешь, не надо плясать с подключениями, датасетами, чартами.
Работает действительно быстро из-за отсутствия клиент-серверности.
Простой деплой on-premises.
Почти неограниченная нагрузка с низкими операционными костами (S3 по цене грязи).
При этом:
Ограниченный размер датасета
Меньше источников данных и интеграций
Интерактивности маловато, на датасете in-memory размера хочется поиграться с параметрами и чтобы таблица менялась в реальном времени.
Спасибо за отзыв! С локальным запуском мой косяк, имелся в виду
npm ci
(без run) — обновил ридми.Спасибо за багрепорт, исправил! Думаю, перед дальнейшим развитием хорошо бы намазать тестов =)
DuckDB мотивирует SQL-синтаксисом или чем-то еще?
Пока никак =) На слое данных это не проблема, в arquero есть полный комплект джойнов, но много интерфейсной работы (переключение таблиц, мульти-табличные пайплайны и всё такое). Задача в топе на развитие.
В спецификации со времён ES6 есть специальное поручение (12.14.4.1.e.iii) в такой ситуации доставать
name
функции из имени переменной (и из многих других мест, ищется поSetFunctionName
).И это легко проверить
А в минифицированном коде имена и функций, и переменных, обфусцируются и ориентироваться в любом случае придется по
line:column
Предпочитать любые библиотеки по любому критерию, разумеется, базовое право каждого человека.
Я обдумаю это предложение, спасибо)
> Там в
preset-small-lib
используетсяesbuild
Благая весть! Вот я дед
Спасибо!
Мне второй раз предъявляют за
map
, но мне нравится это название — отображение же! (возможно, конформные отображения сломали мне мозг) В голом JS под map подразумевается не только то, что вы подумали, но еще и ассоциативный массивMap
. В TS есть mapped types, который совсем не про массивы. В rx есть map, и ничего, как-то живут. В общем, если подойти достаточно абстрактно, всё есть map)size-limit конечно лучше чем жать голый UMD, но мы всё ещё измеряем один бандл, а не разницу с пустым приложением, так что EOCD и непрогретый gzip остаются. К тому же завязка на вебпак, который инжектит свой рантайм — я что-то уже не хочу к нему приближаться вообще
Я ждал этого комментария) "Просто валидация" — растяжимое понятие, хотел дополнительно уточнить что речь не о валидации форм