@flighter7

Каким должен быть конечный файл npm пакета?

Доброго времени суток!
Я опубликовал npm-пакет, который представляет из себя класс без зависимостей, который что-то делает. Исходники на TypeScript, при помощи babel'a и rollup'a модуль собирается в несколько вариантов, основным после установки через npm является не минифицированный UMD ESNext (т.е не преобразованный код в ES5). Я выбрал такой вариант, потому что core-js сильно раздует модуль при преобразовании, с 6кб до 20кб при минификации, с 20кб до 70кб без минификации. Т.о. переложив задачу по транспилированию на пользователя. Но в то же время я знаю, что многие пользователи не преобразовывают модули из node_modules, тогда мой код так и останется в ESNext и, возможно, не будет работать.

Собственно, вопрос: конечный файл модуля должен быть уже преобразован и минифицирован или преобразования должен делать пользователь при помощи сборщиков?
Почему меня смущает первый вариант: есть пользователь, который использует два преобразованных/минифицированных модуля. Эти два модуля используют .includes(), который будет транспилирован в какую-то функцию. Получается, что код будет раздут, тк оба модуля используют N одинаковых преобразователей, а тот же webpack навряд ли сможет найти их и вынести отдельно для обоих модулей.
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
Не нужно лишние зависимости типа core-js запихивать в конечный файл. Там должен быть только код библиотеки. Зависимости потребитель вашего пакета добавит и так. Просто добавьте их в peerDependencies.

У rollup есть опция external для этого.

Чтобы вспомогательные функции не добавлялись в конечный файл, в tsconfig нужно добавить опции "importHelpers": true, "noEmitHelpers": true, а в зависимости пакета - добавить tslib.

Если этого не делать, то может так случиться, что одни и те же зависимости будут добавлены в конечное приложение несколько раз.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@grinat
Он уже должен быть минифицирован, эту задачу перекладывают на пользователя только конченные люди, т.к. create react app и тому подобные не предполагают пользовательского конфигам. По второму смотри lodash например, там можно тащить все, или только отдельный подмодуль.
Да и rollup не советую использовать, это говно с кучей проблем и довольно тухлым сообществом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы