Я создал довольно много пакетов npm, но я до сих пор не знаю правильного ответа на этот вопрос: "Должны ли быть уменьшены пакеты jpm jpm?"
Я всегда понимал, что минимизация минифицированного кода - плохая идея, поэтому не делал этого в моих пакетах npm. Тем не менее, я вижу, что некоторые npm-пакеты axios, стилизованные компоненты предоставляют мини-версии своих файлов "dist" наряду с неминифицированными версиями, в то время как Lodash этого не делает.
Что правильно? Кто будет использовать сокращенные версии?
Все зависит от среды ваших потребителей пакетов
Для аудитории NodeJS ваш пакет не обязательно должен быть минимизирован, поскольку время выполнения узлов обычно имеет прямой доступ к node_modules
папке node_modules
. Сетевые передачи не требуются, и до запуска кода не выполняется никаких дополнительных преобразований кода.
Для потребления через среду dev, которая использует комплектщик в своем конвейере сборки, ваш пакет лучше всего не минимизировать. В большинстве случаев потребители пакетов реализуют собственный процесс минимизации. Кроме того, при предоставлении полного формата модуля, например:
Вышеприведенное утверждение основывается на предположении, что при включении нескольких исходных файлов для минимизации предшествует процесс связывания. В настоящее время редко выделяются отдельные модули. Если вы предоставляете отдельные модули, например, для среды выполнения RequireJS в браузере, минимизация по-прежнему актуальна, так как эти файлы извлекаются по сети.
Если вы решите не предоставлять мини-код, все же целесообразно запускать собственные тесты, чтобы убедиться, что стандартный процесс минимизации - например, с UglifyJS - не нарушает работу программного обеспечения.
Несмотря на то, что для многих потребителей нет необходимости минимизировать ваш код, по-прежнему рекомендуется поставлять мини-пакет в дополнение к вашему регулярному распространению, на случай, если кто-то сможет извлечь из него выгоду.
Для плагинов/расширений для фреймворков, таких как Angular, Vue, Ember и т.д., Обычно не нужно минимизировать ваш код, поскольку все они реализуют собственный конвейер сборки, часто через cli.
Это случаи, в которых минимизация ориентирована в первую очередь. Если вы размещаете файл на CDN или предоставляете его для прямого использования тега <script>
, то, что вы видите, это то, что вы получаете. В обоих случаях файл должен пройти по сети. Minification сохраняет байты.
Между этими двумя должно быть очень важное различие. Хотя минификация не всегда необходима, как правило, ваша ответственность transpile любого кода, который вряд ли будет 100% совместимостью с целевой средой вашего пакета аудитории. Это включает:
ES20XX
для - возможно - ES5ES20XX
API ES20XX
Если ваш пакет состоит из одного пакета вместо нескольких отдельных модулей, минимализация всегда является безопасной ставкой. Так как связующее никогда не будет пытаться ничего смешного с помощью одного модуля/объекта (например, дрожания дерева), скорее всего, ваш код будет технически не изменяться вообще каким-либо процессом сборки.
Если вы собираетесь распространять мини-пакет своего программного обеспечения, было бы неплохо также отправить неминифицированную версию для целей отладки.