Я обновил проект до Webpack 4.1.1 и обнаружил ошибку в UglifyJS, которую, похоже, не могу обойти.

Минимальное воспроизводимое репо здесь: https://github.com/jamesopti/uglifyjs-webpack-issue

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

uglifyOptions: {
  mangle: false,
  keep_classnames: true,
  keep_fnames: true,
},

Любые идеи?

Код Main.js:

import React from 'react';

import { render } from 'react-dom';
import ReactCodeMirror from 'react-codemirror';

// Enables syntax highlighting for javascript
require('codemirror/mode/javascript/javascript');
// Enables linting for javascript
require('codemirror/addon/lint/lint');
require('codemirror/addon/lint/javascript-lint');

window.JSHINT = require('jshint').JSHINT;

const defaultOptions = {
  lint: true,
};

render(
  <ReactCodeMirror
    options={defaultOptions}
    value={'some\ncode'}
  />, document.querySelector('#root')
);

Конфигурация Webpack:

  entry: './src/main.js',

  mode: 'development',

  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },

  module: {
    rules: [
      { test: /\.css$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader' } ] },
      { test: [/\/src\/(?:.*)\.js$/], use: { loader: 'babel-loader' } },
    ]
  },

  optimization: {
    minimizer: [
      new UglifyJsPlugin({
        cache: true,
        parallel: true,
        uglifyOptions: {
          mangle: false,
          keep_classnames: true,
          keep_fnames: true,
        },
      }),
    ]
  }

Error rendering component

0
jamis0n 15 Мар 2018 в 04:20

1 ответ

Лучший ответ

Основная причина этого - ошибка в UglifyJS (сообщается здесь ).

Минимальный воспроизводимый код:

(function(mod) {
  mod();
})(function() {
  function getMaxSeverity(ax, bx) {
    if (ax === "error") {
      return ax;
    } else {
      return bx;
    }
  }
  function main() {
    var arr = ['hey'];
    for (var i = 0; i < arr.length; i++) {
      console.log(getMaxSeverity('one', 'two'));
    }
  }
  main();
});

Обходной путь - встроенная опция сжатия

optimization: {
  minimizer: [
    new UglifyJsPlugin({
      uglifyOptions: {
        compress: {
          inline: 1,
        }
      }
    })
  ]
}
0
jamis0n 21 Мар 2018 в 06:54