Webpack 4: сбой режима производства для библиотеки React - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь построить свою библиотеку реагирования, однако она не работает на mode: production. Когда я импортирую свою библиотеку в другое приложение, я получаю следующее сообщение:

Uncaught TypeError: Cannot set property props of #<TWithProps> which has only a getter.

Далее:

The above error occurred in the <_class3> component

Проблема в том, что она, похоже, связывает мою библиотеку, однако при импорте связанного библиотеки я получаю 2 ошибки выше. Дополнительно Этого не происходит в режиме разработки.

Я пытался следовать многим руководствам, однако все они приводили к одному и тому же результату. Мое первое предположение состоит в том, что это, вероятно, связано с моим плагином минимизатора (я пробовал оба UglifyPlugin и TerserPlugin), однако это не так. Я также прочитал в документации вебпака, что он должен использовать минимизирующий плагин, если он есть. Однако это не похоже на это?

Это мой веб-пакет

module.exports = {
  mode: 'production',
  entry: {
    index: [
      'babel-polyfill',
      './src/index.js',
    ],
  },
  output: {
    path: srcBuild,
    filename: '[name].js',
    chunkFilename: '[name].[chunkhash].js',
    libraryTarget: 'commonjs',
    libraryExport: 'default',
  },
  optimization: {
    noEmitOnErrors: true,
    minimizer: [
      new TerserPlugin({
        cache: true,
        parallel: true,
        sourceMap: true,
        terserOptions: {
          mangle: false,
          compress: {
            reduce_funcs: false,
            reduce_vars: false,
            keep_classnames: true,
            keep_fnames: true,
            keep_fargs: true,
            pure_getters: true,
          },
        },
      }),
   ],
}

Я ожидаю, что моя библиотека будет работать так же хорошо, как и в mode: development.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Решил, добавив этот плагин

    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('production'),
    }),
0 голосов
/ 17 января 2019

Могу я спросить, как вы используете вашу библиотеку из другого приложения? У вас есть libraryTarget: 'commonjs' в вашей конфигурации. Если вы не знаете, как ваши клиенты будут использовать вашу библиотеку, рекомендуется выбрать для экспорта значение umd , установив libraryTarget: 'umd'.

Это должно позволить вам использовать ES6 import или просто require it, webpack или другой пакет приложений позаботятся об их разрешении.

...