Как заставить treehaking работать для файла, который экспортирует несколько компонентов реакции?

У меня есть файл, в который я экспортирую несколько констант с массивами дочерних элементов, которые называются icons.js.

В другом файле реакции назовем его CloseButton.js. Я только импортирую

import { cross } from './icons.js';

и когда я запускаю webpack с включенным производственным режимом, все остальные значки также импортируются (объем экспорта const icons.js составляет около 100 КБ, но одна строка не должна быть больше 1 КБ) в транспилированный CloseButton. js.

Я использую webpack 4.30.0 с @ babel / preset-env и @ babel / preset-react.

webpack.config.js

const config = {
  entry: './CloseButton.js',
  output: {
    filename: 'CloseButton.js',
  },
  plugins: [],
  module: {
    rules: [
      {
        test: /\.js/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [['@babel/preset-env', {
              modules: false
            }], '@babel/preset-react']
          }
        }
      }
    ]
  },
  mode: 'production'
};

module.exports = config;

Я протестировал запуск той же установки, но только экспорт строк из icons.js, а затем код правильно исключал мертвый код.

Кто-нибудь знает, есть ли способ экспортировать только «крестик» из файла icons.js без создания отдельного файла для каждого компонента реакции, определенного в icons.js?

Я протестировал удаление всех ссылок на consts, которые экспортируются как компоненты React из icons.js, и это работает, но это не позволяет мне экспортировать значки.


person kachiem    schedule 23.04.2019    source источник
comment
Я лично храню значки в отдельных файлах, например .. /icons/cross.js, тогда вам не нужно беспокоиться о раскачивании деревьев. Небольшие поддерживаемые файлы javascript в конечном итоге имеют и другие преимущества.   -  person Keith    schedule 23.04.2019
comment
Возможно, имеет смысл разделить его, файл icons.js автоматически создается в данный момент с помощью сценария, который считывает кучу файлов svg из папки.   -  person kachiem    schedule 23.04.2019
comment
Как экспортируется каждая иконка, я думаю, что для встряхивания дерева это должно быть export icon1; export icon2; и т. Д., А не как - ›export default icons   -  person Keith    schedule 23.04.2019
comment
Привет, Кейт, значки экспортируются следующим образом: export const icon1;, export const icon2;.   -  person kachiem    schedule 24.04.2019
comment
Я знаю, что решение по разделению файла сработает, но я просто спрашиваю, не работает ли treehaking проблема для всех файлов, которые экспортируют несколько компонентов реагирования, или это что-то, что я делаю неправильно с моей реакцией компонентный экспорт?   -  person kachiem    schedule 24.04.2019
comment
Вы пробовали - ›"sideEffects": false в конфиге?   -  person Keith    schedule 24.04.2019


Ответы (1)


Я понял, в чем проблема, в основном я устанавливал компоненты реакции непосредственно на export const myicon = [<path></path>, <path />]; Вместо этого, конечно, нужно обернуть их вызовом функции.

например: `` экспорт const myicon = () => {

return ([,])} `` `

person kachiem    schedule 24.04.2019