Skip to content

feat(*): add file exports #76

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open

feat(*): add file exports #76

wants to merge 11 commits into from

Conversation

dimensi
Copy link

@dimensi dimensi commented Dec 23, 2021

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

  1. Обновить конфиг для rollup.
    • Добавил в сборку preserveModules: true опцию.
    • Собираю es файлы с расширением mjs

Пытался использовать https://github.com/alfredosalzillo/rollup-plugin-multi-input, но из-за агрессивного чанк сплита у роллапа, роллап генерировал чанки с хешами (каждый раз новыми) и переиспользовал их для в индексах внутри папок с хелперами и внутри корневого index. Мне такое поведение не понравилось, особенно хеши. Да и хотел, я более естественную генерацию и тут подошел preserveModules.
Он сохранял структуру и не выносил чанки на уровень выше, но вместе с плагином роллап все равно продолжал агрессивно генерировать чанки. И тогда я потерял смысл в плагине и оставил только опцию preserveModules.
Но в такой ситуации rollup начал выбрасывать из сборки index.js файлы которые находились внутри хелперов и генерировал файлы аля hook.js в каждой папке, поэтому я решил дропнуть файл, а сами hook файлы переименовать в index.

  1. Написал небольшой скрипт который генерирует файлы которые помогают с экспортами хелперов. Он встроен в сборку проекта

    • Так как typescripts пока еще не поддерживает этот сахар, я генерирую файлы [name].js/mjs/d.ts, чтоб разработчики могли импортировать хелперы без вложенности
      import { currency } from '@alfalab/data/currency'
    • Он создает в корне .gitignore и обновляет его каждый раз когда появляется новый хелпер. Гитигнор убирает из корня пакета все сгенерированные файлы пунктом выше.
    • Он также обновляет dts.json конфиг, чтоб dts-generator создавал типы под каждый хелпер отдельно.
  2. Обновил files в package.json.

  3. Обновил способ генерации index.d.ts в корне пакетов, теперь просто копируется index.ts в .dts, typescript способен сам зарезолвить импорты, необходимости дублировать типы с помощью dts генератора нет.

Дерево файлов

До
image

После
image

@dimensi dimensi self-assigned this Dec 23, 2021
@etroynov
Copy link
Contributor

А в чем смысл данного изменения?

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants