Файл манифеста Weback не компилируется в es5 - PullRequest
0 голосов
/ 05 ноября 2018

Недавно наша сборка перестала работать на IE11 из-за того, что в файле манифеста веб-пакета есть .includes, который IE11 не может запустить.

Я копался в этом и обнаружил, что react-datepicker использует .includes() в своем коде, но в нашем файле main.app.js он конвертирует его, так что там ничего нет, он есть только в файле манифеста.

Если я удалю файл манифеста из нашего веб-пакета, ошибка переместится в файл main.app.js со словами object doesn't support property or method includes. Эта ошибка исходит от camelCase.js из redux-actions. Я чувствую, что это красная сельдь, но не совсем уверен.

Я не уверен, что это проблема с веб-пакетом, вавилонским сообщением или ошибкой плагина.

кто-нибудь когда-либо испытывал это раньше и знает, как решить?

Шаги, которые я сделал до сих пор :

Я заблокировал реакцию на версию 16.3.0 в нашем package.json.

Я понизил плагин react-datepicker.

Я удалил файл манифеста из загрузки.

Я попытался обновить redux-actions.

Я попытался понизить рейтинг redux-actions

Вот мой файл веб-пакета:

const pkg = require('../package.json');
const path = require('path');
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

const appConfig = {
  VERSION: pkg.version,
  OUTPUT_NAME: pkg.config.OUTPUT_NAME,
  DEV_PORT: pkg.config.DEV_PORT
};

const config = {
  mode: 'development',
  context: path.resolve(__dirname),
  entry: {
    app: [
      '../src/index.js',
      '../src/styles/main.css',
      '../index.pug'
    ]
  },
  output: {
    path: path.resolve(__dirname, '../public/'),
    filename: `scripts/${appConfig.OUTPUT_NAME}.[name].${appConfig.VERSION}.js`,
    publicPath: '/'
  },
  resolve: {
    extensions: [ '.js', '.jsx' ]
  },
  externals: {
    'lottie-web': 'lottie'
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: 'babel-loader'
      },
      {
        test: /\.(css|scss)$/,
        exclude: /node_modules/,
        use: [
          'style-loader',
          {
            loader: 'css-loader',
            options: {
              sourceMap: true,
              importLoaders: 1
            }
          },
          'postcss-loader'
        ]
      },
      {
        test: /\.pug/,
        exclude: /node_modules/,
        use: 'pug-loader'
      },
      {
        test: /.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/,
        exclude: /node_modules/,
        use: 'file-loader'
      }
    ]
  },
  watch: true,
  watchOptions: {
    ignored: /node_modules/
  },
  devServer: {
    contentBase: path.resolve(__dirname, '../public/'),
    port: appConfig.DEV_PORT,
    historyApiFallback: true
  },
  devtool: 'source-map',
  optimization: {
    runtimeChunk: 'single',
    splitChunks: {
      cacheGroups: {
        vendor: {
          test: /[\\/]node_modules[\\/]/,
          name: 'manifest',
          chunks: 'all'
        }
      }
    }
  },
  plugins: [
    new ExtractTextPlugin(`../styles/${appConfig.OUTPUT_NAME}.[name].${appConfig.VERSION}.css`),
    new CopyWebpackPlugin([
      { from: '../src/assets', to: path.resolve(__dirname, '../public/assets') },
      { from: '../src/content', to: path.resolve(__dirname, '../public/content') }
    ]),
    new HtmlWebpackPlugin({ 'template': '../index.pug' })
  ]
};

module.exports = config;

1 Ответ

0 голосов
/ 05 ноября 2018

Вместо того, чтобы пытаться избавиться от библиотеки, которая вызывает проблему несовместимости с Internet Explorer 11, я бы порекомендовал использовать полифилл, который добавляет поддержку проблемных API, таких как Array.includes () во время выполнения.

Вероятно, наиболее популярным решением является Babel Polyfill .

Вы можете использовать его, добавив следующий тег script в HTML-код вашей страницы:

    <script nomodule src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.min.js" integrity="sha256-WRc/eG3R84AverJv0zmqxAmdwQxstUpqkiE+avJ3WSo=" crossorigin="anonymous"></script>

Обратите внимание на атрибут nomodule , чтобы убедиться, что только браузеры, не поддерживающие модули ES2015, действительно загружают полифилл - т.е. IE11.

Современные браузеры (Chrome, Firefox, Safari и т. Д.) Просто игнорируют тег скрипта и не обременяют пользователей дополнительной загрузкой.

...