Из руководства по веб-упаковке - Отметить файл как свободный от побочных эффектов :
Весь код, указанный выше, не содержит побочных эффектов, поэтому мы можем просто пометить свойство как ложное для и сообщить веб-пакету, что оно может безопасно удалить неиспользуемый экспорт .
Итак, установка "sideEffects": false
в package.json
говорит веб-пакету, что ваши модули не имеют побочных эффектов. Так что это может сократить неиспользованный экспорт (в вашем случае, неиспользованный реэкспорт). Это обычно используется авторами библиотеки .
Но это только одна сторона уравнения.
Из документов конфигурации веб-пакета - optimization.sideEffects
:
Указывает веб-пакету распознавать флаг sideEffects
в package.json
или правила для пропуска модулей, которые не содержат побочных эффектов, если экспорт не используется.
Таким образом, чтобы использовать ранее упомянутый параметр, потребителю библиотеки потребуется установить для параметра optimization.sideEffects
значение true
в своем файле конфигурации веб-пакета:
// webpack.config.js
module.exports = {
...
optimization: {
sideEffects: true
}
...
}
Обратите внимание, что в режиме production
эта опция включена по умолчанию. Так что вам нужно будет установить его только для режима development
.
N.B. : В этом случае вы являетесь автором и потребителем ваших модулей.
Наконец, давайте посмотрим на вашу точку входа в веб-пакет:
// webpack entrypoint
import 'document-register-element';
import 'babel-polyfill';
import { CompDiv } from './index';
Если вы не используете импортированный CompDiv
позже в этом файле, веб-пакет его удалит - при условии, что вы установили "sideEffects": false
в package.json
и optimization.sideEffects
в true
в конфигурации веб-пакета.
Но, например, даже если вы только импортировали 'babel-polyfill'
и не будете явно использовать что-либо из этого позже в этом файле, веб-пакет не удалит его, потому что package.json
для babel-polyfill
библиотека не содержит "sideEffects": false
.
Надеюсь, это прояснит ситуацию.