Приложение VueJS не загружается в Internet Explorer - PullRequest
0 голосов
/ 12 ноября 2018

Я получаю эту ошибку в IE:

SCRIPT1010: ожидаемый идентификатор bundle.js

Я нашел решение в виде модуля под названием target-webpack-plugin , который работает как шарм, но также создал новую проблему в моем приложении. Всякий раз, когда я пытаюсь выполнить отладку в Google Chrome через исходные карты, вместо отображения источника файла, содержащего ошибку, он выглядит так:

ReferenceError: родители не определены в deserializeParent (bundle.js: 16180) на bundle.js: 16192

Похоже, исходные карты не функционировали должным образом. Это будет ожидаемый результат:

ReferenceError: родители не определены at deserializeParent (account.ts: 44) at account.ts: 117

Теперь удаление target-webpack-plugin вернет меня к той же проблеме - не запускать мое приложение в IE. Вот мои конфигурации веб-пакетов:

module.exports = {
  context: path.dirname(__dirname),
  entry: {
    app: './src/main.js',
  },
  target: 'web',

  output: {
    filename: '[name].[contenthash].js',
    hashDigestLength: 8,
  },

  resolve: {
    extensions: ['.ts', '.js', '.vue'],
    alias: {
      '@': path.resolve(__dirname, '../src'),
    },
  },

  module: {
    rules: [
      {
        test: /\.js/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
        },
      },
      {
        test: /\.ts$/,
        exclude: /node_modules/,
        use: [
          {
            loader: 'babel-loader',
          },
          {
            loader: 'ts-loader',
            options: {
              transpileOnly: true,
            },
          },
        ],
      },
      {
        test: /\.vue$/,
        loader: 'vue-loader',
      },
      {
        test: /\.css$/,
        use: [
          'style-loader',
          'css-loader',
        ],
      },
      {
        test: /\.scss$/,
        use: [
          'style-loader',
          'css-loader',
          'sass-loader',
        ],
      },
    ],
  },

  stats: 'errors-only',

  plugins: [
    new VueLoaderPlugin(),
    new ForkTsCheckerWebpackPlugin({
      tslint: true,
      reportFiles: ['src/**/*.ts'],
    }),
    new StylishWebpackPlugin(),
    new webpack.DefinePlugin({
      USE_LOGROCKET: withLogRocket,
    }),
    // new TargetsPlugin({
    //   browsers: ['last 2 versions', 'chrome >= 41', 'not ie <= 8', '> 1%'],
    // }),
  ],
};

Выше приведена базовая конфигурация веб-пакета, а вот моя конфигурация dev-пакета:

module.exports = merge(baseConfig, {
  mode: 'development',

  devtool: 'source-map',
  output: {
    filename: 'bundle.js',
    publicPath: 'https://localhost:8080/',
  },

  module: {
    rules: [
      {
        test: /\.(png|jpe?g|gif|webp)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 4096,
              name: 'img/[name].[hash:8].[ext]',
            },
          },
        ],
      },
    ],
  },
});

И, наконец, вот мой файл .babelrc:

{
    "presets": ["env"],
    "plugins": [
        "transform-es2015-destructuring",
        "transform-object-rest-spread"
    ]
}

Я пытался это и это безрезультатно. Я попытался изменить свой файл babelrc с предложением по вышеупомянутой ссылке, так как он не работал, мне пришлось вернуться. Я также пробовал es3ify, но мне кажется, что распространение должно быть последним элементом списка элементов при компиляции моего кода. Я также попытался использовать babel-polyfill , но без сигары, поэтому мне пришлось вернуться к исходной конфигурации веб-пакета. У меня также уже есть <meta name="viewport" content="width=device-width, initial-scale=1"> в моем файле index.html, но, похоже, он мне тоже не помог. Есть ли способ, которым я могу решить проблему IE, не нарушая при этом исходные карты (в Chrome)? Любой узел модуля или некоторые изменения в конфигурации, которые могут мне помочь?

РЕДАКТИРОВАТЬ: я также пробовал babel-preset-env, но тоже не работал.

РЕДАКТИРОВАТЬ: протестировано на IE 11

...