Сборка webpack для продакшена — минимизированные зависимости

Скажем, в npm есть модуль под названием «awesomepackage». Я могу зарегистрировать его как зависимость моего приложения через package.json вот так:

npm i --save awesomepackage

Проверяя мою папку node_modules, я вижу папку с именем «awesomepackage», которая выглядит так:

- index.js
- package.json
- README.md
- lib/
    - awesomepackage.min.js

и я могу использовать пакет внутри своего собственного приложения следующим образом:

import {AwesomeThing} from 'awesomepackage';

Мой вопрос:

Когда я создаю свое приложение с помощью веб-пакета, мой окончательный bundle.js всегда содержит исходный код из node_modules/awesomepackage/index.js - независимо от каких-либо переменных среды, которые я установил (например, NODE_ENV=production).

Есть ли способ указать веб-пакету использовать предварительно созданные файлы (например, node_modules/awesomepackage/lib/awesomepackage.min.js), если они поставляются как часть пакета NPM, вместо повторной сборки из исходного кода?

Я видел решения, которые используйте resolve.alias и noParse в конфигурации webpack с жестко запрограммированными путями к минимизированным исходным файлам, но не в основном победить цель использования npm и webpack? Я не хочу жестко кодировать и поддерживать пути к минимизированным файлам сборки каждой зависимости!

Я попал сюда, потому что мой bundle.js подскочил на 2,5 МБ, когда я добавил moment.js, который составляет 167 КБ в минимизированном виде, включая все locales, но исходный код которых включает 2 Мб тестов.

Редактировать

Очевидно, что это нечто большее, чем просто минимизация финального файла bundle.js в конце. Например: зачем кому-то включать сотни ненужных модульных тестов для зависимостей в окончательный производственный код? Они не делают. Вот почему большинство библиотек предоставляют папку dist (или аналогичную) как часть своего модуля npm.


person Alex McMillan    schedule 23.12.2015    source источник
comment
Используйте webpack.DefinePlugin для установки process.env.NODE_ENV, что приведет к завершению кода разработки (который использует упомянутую переменную env), например, if (process.env.NODE_ENV !== 'production') будет статически оцениваться как if (false), а затем удаляется минификатором как недостижимый код.   -  person zerkms    schedule 23.12.2015
comment
На данный момент инфляция вызвана загрузкой всех локалей. Если вам не нужны все из них - загрузите только необходимое, следуя совету из stackoverflow.com/q/25384360/251311   -  person zerkms    schedule 23.12.2015
comment
зачем кому-то включать сотни ненужных модульных тестов для зависимостей в окончательный производственный код - никто этого не делает.   -  person zerkms    schedule 23.12.2015
comment
@zerkms (1) Установка process.env.NODE_ENV не приводит к тому, что веб-пакет загружает минимизированные зависимости. (2) Если бы инфляция была вызвана включением локалей, я бы увидел 167 КБ инфляции, но я вижу более 2 МБ - примерно размер их tests.js файла (3).   -  person Alex McMillan    schedule 23.12.2015
comment
1. Да, если библиотеки реализованы с учетом этого (например, reactjs). Если нет - это работа минификатора по минимизации, webpack - это просто загрузчик. Обычно не имеет значения, загружаете ли вы исходники и минимизируете их сами или dist. Первое на самом деле может быть лучше, поскольку вы используете версию never minifier. 2. Странно - я использую momentjs и в моих dev и prod билдах точно нет тестов.   -  person zerkms    schedule 23.12.2015


Ответы (2)


Рассмотрим ваш момент пакет.

Вы всегда можете использовать

import moment from 'node_modules/moment/min/moment-with-locales.min.js'

Но это не очень хорошая идея.


Вы не должны использовать мини-файлы в веб-пакете

Если вы используете

import moment from 'moment';

он соберет модуль из исходников. Но если у вас есть процесс минимизации в конфигурационном файле веб-пакета, он не должен быть намного больше, чем отправленные .min.js файлы. Часто ваша собственная сборка может быть даже меньше оригинальной .min.js!


Поэкспериментируйте на мгновение

Я измеряю дополнительный размер моего bundle.js после добавления moment и его 190 КБ, а исходный размер moment/min/moment-with-locales.min.js составляет 207 КБ. Ваши 2,5 МБ, вероятно, что вы добавляете карты (в моей конфигурации с картами moment веса 2,7 МБ) Вы можете проанализировать, что сборка со всеми локалями - webpack может распечатать эту статистику (размеры указаны до минификации):

 [373] ./~/moment/moment.js 135 kB {0} [built]
 [374] ./~/moment/locale/af.js 2.62 kB {0} [optional] [built]
 [375] ./~/moment/locale/ar-ma.js 2.12 kB {0} [optional] [built]
 [376] ./~/moment/locale/ar-sa.js 3.16 kB {0} [optional] [built]
 [377] ./~/moment/locale/ar-tn.js 1.97 kB {0} [optional] [built]
 [378] ./~/moment/locale/ar.js 4.59 kB {0} [optional] [built]
 [379] ./~/moment/locale/az.js 3.35 kB {0} [optional] [built]
 [380] ./~/moment/locale/be.js 4.86 kB {0} [optional] [built]
 [381] ./~/moment/locale/bg.js 3.1 kB {0} [optional] [built]
 [382] ./~/moment/locale/bn.js 3.62 kB {0} [optional] [built]
 [383] ./~/moment/locale/bo.js 3.87 kB {0} [optional] [built]
 [384] ./~/moment/locale/br.js 3.44 kB {0} [optional] [built]
 [385] ./~/moment/locale/bs.js 4.7 kB {0} [optional] [built]
 [386] ./~/moment/locale/ca.js 2.97 kB {0} [optional] [built]
 [387] ./~/moment/locale/cs.js 6.4 kB {0} [optional] [built]
 [388] ./~/moment/locale/cv.js 2.33 kB {0} [optional] [built]
 [389] ./~/moment/locale/cy.js 2.92 kB {0} [optional] [built]
 [390] ./~/moment/locale/da.js 2.07 kB {0} [optional] [built]
 [391] ./~/moment/locale/de-at.js 3.03 kB {0} [optional] [built]
 [392] ./~/moment/locale/de.js 2.95 kB {0} [optional] [built]
 [393] ./~/moment/locale/dv.js 2.69 kB {0} [optional] [built]
 [394] ./~/moment/locale/el.js 3.73 kB {0} [optional] [built]
 [395] ./~/moment/locale/en-au.js 2.32 kB {0} [optional] [built]
 [396] ./~/moment/locale/en-ca.js 2.2 kB {0} [optional] [built]
 [397] ./~/moment/locale/en-gb.js 2.38 kB {0} [optional] [built]
 [398] ./~/moment/locale/en-ie.js 2.37 kB {0} [optional] [built]
 [399] ./~/moment/locale/en-nz.js 2.32 kB {0} [optional] [built]
 [400] ./~/moment/locale/eo.js 2.67 kB {0} [optional] [built]
 [401] ./~/moment/locale/es.js 2.97 kB {0} [optional] [built]
 [402] ./~/moment/locale/et.js 3.14 kB {0} [optional] [built]
 [403] ./~/moment/locale/eu.js 2.39 kB {0} [optional] [built]
 [404] ./~/moment/locale/fa.js 3.27 kB {0} [optional] [built]
 [405] ./~/moment/locale/fi.js 3.86 kB {0} [optional] [built]
 [406] ./~/moment/locale/fo.js 2.1 kB {0} [optional] [built]
 [407] ./~/moment/locale/fr-ca.js 2.09 kB {0} [optional] [built]
 [408] ./~/moment/locale/fr-ch.js 2.25 kB {0} [optional] [built]
 [409] ./~/moment/locale/fr.js 2.24 kB {0} [optional] [built]
 [410] ./~/moment/locale/fy.js 2.64 kB {0} [optional] [built]
 [411] ./~/moment/locale/gd.js 2.63 kB {0} [optional] [built]
 [412] ./~/moment/locale/gl.js 2.77 kB {0} [optional] [built]
 [413] ./~/moment/locale/he.js 3.41 kB {0} [optional] [built]
 [414] ./~/moment/locale/hi.js 3.88 kB {0} [optional] [built]
 [415] ./~/moment/locale/hr.js 4.83 kB {0} [optional] [built]
 [416] ./~/moment/locale/hu.js 4 kB {0} [optional] [built]
 [417] ./~/moment/locale/hy-am.js 3.22 kB {0} [optional] [built]
 [418] ./~/moment/locale/id.js 2.94 kB {0} [optional] [built]
 [419] ./~/moment/locale/is.js 4.43 kB {0} [optional] [built]
 [420] ./~/moment/locale/it.js 2.46 kB {0} [optional] [built]
 [421] ./~/moment/locale/ja.js 2.21 kB {0} [optional] [built]
 [422] ./~/moment/locale/jv.js 2.94 kB {0} [optional] [built]
 [423] ./~/moment/locale/ka.js 3.15 kB {0} [optional] [built]
 [424] ./~/moment/locale/kk.js 2.68 kB {0} [optional] [built]
 [425] ./~/moment/locale/km.js 2.02 kB {0} [optional] [built]
 [426] ./~/moment/locale/ko.js 2 kB {0} [optional] [built]
 [427] ./~/moment/locale/ky.js 2.69 kB {0} [optional] [built]
 [428] ./~/moment/locale/lb.js 4.92 kB {0} [optional] [built]
 [429] ./~/moment/locale/lo.js 2.32 kB {0} [optional] [built]
 [430] ./~/moment/locale/lt.js 4.37 kB {0} [optional] [built]
 [431] ./~/moment/locale/lv.js 3.9 kB {0} [optional] [built]
 [432] ./~/moment/locale/me.js 4.1 kB {0} [optional] [built]
 [433] ./~/moment/locale/mk.js 3.11 kB {0} [optional] [built]
 [434] ./~/moment/locale/ml.js 2.81 kB {0} [optional] [built]
 [435] ./~/moment/locale/mr.js 5.39 kB {0} [optional] [built]
 [436] ./~/moment/locale/ms-my.js 2.86 kB {0} [optional] [built]
 [437] ./~/moment/locale/ms.js 2.85 kB {0} [optional] [built]
 [438] ./~/moment/locale/my.js 2.73 kB {0} [optional] [built]
 [439] ./~/moment/locale/nb.js 2.23 kB {0} [optional] [built]
 [440] ./~/moment/locale/ne.js 3.81 kB {0} [optional] [built]
 [441] ./~/moment/locale/nl.js 2.63 kB {0} [optional] [built]
 [442] ./~/moment/locale/nn.js 2.09 kB {0} [optional] [built]
 [443] ./~/moment/locale/pa-in.js 4.01 kB {0} [optional] [built]
 [444] ./~/moment/locale/pl.js 3.94 kB {0} [optional] [built]
 [445] ./~/moment/locale/pt-br.js 2.23 kB {0} [optional] [built]
 [446] ./~/moment/locale/pt.js 2.34 kB {0} [optional] [built]
 [447] ./~/moment/locale/ro.js 2.61 kB {0} [optional] [built]
 [448] ./~/moment/locale/ru.js 7.08 kB {0} [optional] [built]
 [449] ./~/moment/locale/se.js 2.23 kB {0} [optional] [built]
 [450] ./~/moment/locale/si.js 2.43 kB {0} [optional] [built]
 [451] ./~/moment/locale/sk.js 5.49 kB {0} [optional] [built]
 [452] ./~/moment/locale/sl.js 6.16 kB {0} [optional] [built]
 [453] ./~/moment/locale/sq.js 2.45 kB {0} [optional] [built]
 [454] ./~/moment/locale/sr-cyrl.js 4.1 kB {0} [optional] [built]
 [455] ./~/moment/locale/sr.js 4.09 kB {0} [optional] [built]
 [456] ./~/moment/locale/ss.js 3.12 kB {0} [optional] [built]
 [457] ./~/moment/locale/sv.js 2.4 kB {0} [optional] [built]
 [458] ./~/moment/locale/sw.js 2.08 kB {0} [optional] [built]
 [459] ./~/moment/locale/ta.js 4.21 kB {0} [optional] [built]
 [460] ./~/moment/locale/te.js 3.09 kB {0} [optional] [built]
 [461] ./~/moment/locale/th.js 2.4 kB {0} [optional] [built]
 [462] ./~/moment/locale/tl-ph.js 2.14 kB {0} [optional] [built]
 [463] ./~/moment/locale/tlh.js 4.09 kB {0} [optional] [built]
 [464] ./~/moment/locale/tr.js 2.9 kB {0} [optional] [built]
 [465] ./~/moment/locale/tzl.js 3.59 kB {0} [optional] [built]
 [466] ./~/moment/locale/tzm-latn.js 2.11 kB {0} [optional] [built]
 [467] ./~/moment/locale/tzm.js 2.06 kB {0} [optional] [built]
 [468] ./~/moment/locale/uk.js 5.4 kB {0} [optional] [built]
 [469] ./~/moment/locale/uz.js 2.03 kB {0} [optional] [built]
 [470] ./~/moment/locale/vi.js 2.71 kB {0} [optional] [built]
 [471] ./~/moment/locale/x-pseudo.js 2.5 kB {0} [optional] [built]
 [472] ./~/moment/locale/zh-cn.js 4.35 kB {0} [optional] [built]
 [473] ./~/moment/locale/zh-tw.js 3.12 kB {0} [optional] [built]
 [474] ./~/moment/locale ^\.\/.*$ 2.41 kB {0} [optional] [built]

Итак, почему ваша нестандартная сборка меньше? Вы можете использовать более агрессивную минификацию. Моя сборка дает мне эту информацию (вероятно, в этот момент она теряет вес):

Condition always true [./~/moment/moment.js:8,0]
Condition always true [./~/moment/locale/af.js:6,0]
Condition always true [./~/moment/locale/ar-ma.js:7,0]
Condition always true [./~/moment/locale/ar-sa.js:6,0]
Condition always true [./~/moment/locale/ar-tn.js:5,0]
Condition always true [./~/moment/locale/ar.js:8,0]
Condition always true [./~/moment/locale/az.js:6,0]
Condition always true [./~/moment/locale/be.js:8,0]
Condition always true [./~/moment/locale/bg.js:6,0]
Condition always true [./~/moment/locale/bn.js:6,0]
Condition always true [./~/moment/locale/bo.js:6,0]
Condition always true [./~/moment/locale/br.js:6,0]
Condition always true [./~/moment/locale/bs.js:7,0]
Condition always true [./~/moment/locale/ca.js:6,0]
Condition always true [./~/moment/locale/cs.js:6,0]
Dropping unreachable code [./~/moment/locale/cs.js:31,0]
Dropping unreachable code [./~/moment/locale/cs.js:40,0]
Dropping unreachable code [./~/moment/locale/cs.js:49,0]
Dropping unreachable code [./~/moment/locale/cs.js:58,0]
Dropping unreachable code [./~/moment/locale/cs.js:67,0]
Condition always true [./~/moment/locale/cv.js:6,0]
Condition always true [./~/moment/locale/cy.js:6,0]
Condition always true [./~/moment/locale/da.js:6,0]
Condition always true [./~/moment/locale/de-at.js:9,0]
Condition always true [./~/moment/locale/de.js:8,0]
Condition always true [./~/moment/locale/dv.js:6,0]
Condition always true [./~/moment/locale/el.js:6,0]
Condition always true [./~/moment/locale/en-au.js:5,0]
Condition always true [./~/moment/locale/en-ca.js:6,0]
Condition always true [./~/moment/locale/en-gb.js:6,0]
Condition always true [./~/moment/locale/en-ie.js:6,0]
Condition always true [./~/moment/locale/en-nz.js:5,0]
Condition always true [./~/moment/locale/eo.js:8,0]
Condition always true [./~/moment/locale/es.js:6,0]
Condition always true [./~/moment/locale/et.js:7,0]
Condition always true [./~/moment/locale/eu.js:6,0]
Condition always true [./~/moment/locale/fa.js:6,0]
Condition always true [./~/moment/locale/fi.js:6,0]
Condition always true [./~/moment/locale/fo.js:6,0]
Condition always true [./~/moment/locale/fr-ca.js:6,0]
Condition always true [./~/moment/locale/fr-ch.js:6,0]
Condition always true [./~/moment/locale/fr.js:6,0]
Condition always true [./~/moment/locale/fy.js:6,0]
Condition always true [./~/moment/locale/gd.js:6,0]
Condition always true [./~/moment/locale/gl.js:6,0]
Condition always true [./~/moment/locale/he.js:8,0]
Condition always true [./~/moment/locale/hi.js:6,0]
Condition always true [./~/moment/locale/hr.js:6,0]
Condition always true [./~/moment/locale/hu.js:6,0]
Dropping unused variable suffix [./~/moment/locale/hu.js:16,0]
Condition always true [./~/moment/locale/hy-am.js:6,0]
Condition always true [./~/moment/locale/id.js:7,0]
Condition always true [./~/moment/locale/is.js:6,0]
Condition always true [./~/moment/locale/it.js:7,0]
Condition always true [./~/moment/locale/ja.js:6,0]
Condition always true [./~/moment/locale/jv.js:7,0]
Condition always true [./~/moment/locale/ka.js:6,0]
Condition always true [./~/moment/locale/kk.js:6,0]
Condition always true [./~/moment/locale/km.js:6,0]
Condition always true [./~/moment/locale/ko.js:10,0]
Condition always true [./~/moment/locale/ky.js:6,0]
Condition always true [./~/moment/locale/lb.js:6,0]
Condition always true [./~/moment/locale/lo.js:6,0]
Condition always true [./~/moment/locale/lt.js:6,0]
Condition always true [./~/moment/locale/lv.js:7,0]
Condition always true [./~/moment/locale/me.js:6,0]
Condition always true [./~/moment/locale/mk.js:6,0]
Condition always true [./~/moment/locale/ml.js:6,0]
Condition always true [./~/moment/locale/mr.js:7,0]
Condition always true [./~/moment/locale/ms-my.js:6,0]
Condition always true [./~/moment/locale/ms.js:6,0]
Condition always true [./~/moment/locale/my.js:6,0]
Condition always true [./~/moment/locale/nb.js:7,0]
Condition always true [./~/moment/locale/ne.js:6,0]
Condition always true [./~/moment/locale/nl.js:6,0]
Condition always true [./~/moment/locale/nn.js:6,0]
Condition always true [./~/moment/locale/pa-in.js:6,0]
Condition always true [./~/moment/locale/pl.js:6,0]
Condition always true [./~/moment/locale/pt-br.js:6,0]
Condition always true [./~/moment/locale/pt.js:6,0]
Condition always true [./~/moment/locale/ro.js:7,0]
Condition always true [./~/moment/locale/ru.js:8,0]
Condition always true [./~/moment/locale/se.js:6,0]
Condition always true [./~/moment/locale/si.js:6,0]
Condition always true [./~/moment/locale/sk.js:7,0]
Dropping unreachable code [./~/moment/locale/sk.js:32,0]
Dropping unreachable code [./~/moment/locale/sk.js:41,0]
Dropping unreachable code [./~/moment/locale/sk.js:50,0]
Dropping unreachable code [./~/moment/locale/sk.js:59,0]
Dropping unreachable code [./~/moment/locale/sk.js:68,0]
Condition always true [./~/moment/locale/sl.js:6,0]
Condition always true [./~/moment/locale/sq.js:8,0]
Condition always true [./~/moment/locale/sr-cyrl.js:6,0]
Condition always true [./~/moment/locale/sr.js:6,0]
Condition always true [./~/moment/locale/ss.js:6,0]
Condition always true [./~/moment/locale/sv.js:6,0]
Condition always true [./~/moment/locale/sw.js:6,0]
Condition always true [./~/moment/locale/ta.js:6,0]
Condition always true [./~/moment/locale/te.js:6,0]
Condition always true [./~/moment/locale/th.js:6,0]
Condition always true [./~/moment/locale/tl-ph.js:6,0]
Condition always true [./~/moment/locale/tlh.js:6,0]
Condition always true [./~/moment/locale/tr.js:7,0]
Condition always true [./~/moment/locale/tzl.js:6,0]
Condition always true [./~/moment/locale/tzm-latn.js:6,0]
Condition always true [./~/moment/locale/tzm.js:6,0]
Condition always true [./~/moment/locale/uk.js:7,0]
Condition always true [./~/moment/locale/uz.js:6,0]
Condition always true [./~/moment/locale/vi.js:6,0]
Condition always true [./~/moment/locale/x-pseudo.js:6,0]
Condition always true [./~/moment/locale/zh-cn.js:7,0]
Condition always true [./~/moment/locale/zh-tw.js:6,0]

Повторное использование общих модулей

Moment — не лучший модуль для выделения самой мощной функции веб-пакета — повторного использования общих модулей (поскольку moment не использует зависимости).

Не будем считать, что ваше приложение использует 3 модуля, и каждый из них имеет некоторые зависимости.

                   size

module1            20 kB 
  dependencies
    - moduleA      10 kB 
    - moduleB      15 kB
    - moduleC      5  kB
module1.min        50 kB

module2            10 kB 
  dependencies
    - moduleA      10 kB 
    - moduleD      5  kB
module2.min        25 kB

module3            30 kB 
  dependencies
    - moduleA      10 kB 
    - moduleC      5  kB
module3.min        45 kB

Если вы будете использовать только .min версию этих 3 модулей, вы добавите к своему приложению 50 КБ + 25 КБ + 45 КБ = 120 КБ.

                   size

module1            20 kB 
  dependencies
    - moduleA      10 kB  
    - moduleB      15 kB 
    - moduleC      5  kB 
module1.min        50 kB  <-- this

module2            10 kB  
  dependencies
    - moduleA      10 kB 
    - moduleD      5  kB 
module2.min        25 kB  <-- this

module3            30 kB  
  dependencies
    - moduleA      10 kB 
    - moduleC      5  kB
module3.min        45 kB  <-- this

С другой стороны, если вы будете собирать исходные файлы, общие модули будут добавлены только один раз. Не то что раньше moduleA включался 3 раза и moduleC 2 раза. На этот раз в ваше приложение будут добавлены:

                   size

module1            20 kB  <-- this
  dependencies
    - moduleA      10 kB  <-- this
    - moduleB      15 kB  <-- this
    - moduleC      5  kB  <-- this
module1.min        50 kB

module2            10 kB  <-- this
  dependencies
    - moduleA      10 kB 
    - moduleD      5  kB  <-- this
module2.min        25 kB

module3            30 kB  <-- this
  dependencies
    - moduleA      10 kB 
    - moduleC      5  kB
module3.min        45 kB

И, наконец, при таком подходе вы добавляете в свое приложение 95 КБ.

person Everettss    schedule 18.06.2016
comment
Да! Это были бы исходные карты - person Alex McMillan; 19.06.2016
comment
Блестящий ответ, хорошо объясненный - person Drenai; 21.08.2018
comment
Вы потратили много времени на написание этого, но не показали, как вы минимизировали свой источник. Где пример вашей сборки? То, что вы объясняете, хорошо, но если вы не показываете, как вы пришли к этим уменьшенным файлам, это бесполезно. - person Craig; 28.03.2020

Почему бы просто не минимизировать весь веб-пакет bundle.js? (источник)

webpack -p для сборки один раз для производства (минификация)

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

person Josh Beam    schedule 23.12.2015
comment
Но затем я повторно обрабатываю весь исходный код для каждой зависимости! Если это принятый метод, то почему большинство пакетов NPM включают готовые файлы? - person Alex McMillan; 23.12.2015
comment
Они включают минимизированные, потому что многие люди используют разные настройки среды. Вы все еще можете require('node_modules/someModule/minified.min.js') или что-то еще напрямую. Почему важно повторно обрабатывать весь исходный код для каждой зависимости в процессе сборки? Это как-то плохо влияет на вашу машину? Кроме того, 2,5 МБ — это довольно мало в общей схеме приложения. На вашем месте я бы не слишком беспокоился о микрооптимизации, если в этом нет необходимости. - person Josh Beam; 23.12.2015
comment
Например: moment.js включает файл moment/dist/moment-with-locales.min.js размером 167 КБ, но webpack использует moment/moment.js, который требует 2 МБ ненужных модульных тестов! Очевидно, что владелец пакета предоставил исходный код для разработки, в котором могли бы быть полезны модульные тесты, а также распространяемый, минимизированный, эксклюзивный для тестов и оптимизированный файл для использования в рабочей среде. - person Alex McMillan; 23.12.2015
comment
Тогда я, вероятно, просто require уменьшу версию. Вы также можете установить alias в своем webpack-config, который ищет экземпляры, скажем, momentjs, и заменяет их соответствующим путем к уменьшенной версии (как вы предложили в своем исходном вопросе). Кроме этого, я не знаком ни с какими другими способами сделать то, что вы описали. Возможно, кто-то более осведомленный, чем я, сможет вмешаться в этот вопрос. - person Josh Beam; 23.12.2015
comment
Я понимаю; это то, что я делаю. Но это просто не имеет смысла - я не видел ни одного пакета с открытым исходным кодом, делающего это... действительно ли это отраслевой стандарт - перекомпилировать весь исходный код каждой зависимости каждый раз, когда ваш пакет собирается, или явно ссылаться на (читай: жесткий код) минимизированный файл сборки для каждой зависимости? Если да, то почему кто-то беспокоится о включении встроенных/минимизированных файлов или вообще о наличии папки dist? - person Alex McMillan; 23.12.2015
comment
Встроенные/минимизированные файлы по-прежнему полезны для тех, кто не использует настройку среды, такую ​​как webpack. В средах разработки также иногда полезно иметь уменьшенную версию для тестирования. Кроме этого, я не уверен. Может быть, вы можете придумать что-то, чтобы решить эту проблему, если там еще чего-то нет :) Не уверен, что это огромная проблема; повторная обработка целых модулей требует очень мало вычислительной мощности. Если бы это было серьезное узкое место, я бы понял, но я так не думаю. - person Josh Beam; 23.12.2015
comment
Пожалуйста, прочитайте мой вопрос еще раз. Меня больше беспокоит окончательный пакет, содержащий ненужный код разработки, чем вычислительная мощность. - person Alex McMillan; 23.12.2015