Laravel Mix не переносится vendor.js на es5

#webpack #ecmascript-6 #ecmascript-5 #laravel-mix

#webpack #ecmascript-6 #ecmascript-5 #laravel-mix

Вопрос:

Похоже, что Laravel Mix не переносится vendor.js и manifest.js на ES5. Сбой на iPhone Safari и IE 11.

IE DevTools показывает эти ошибки:

Ошибка IE

И похоже, что у него все еще есть функции ES6:

es6

Другие файлы, такие как app.js и фрагменты, похоже, переносятся.

Вот мой webpack.mix.js

 let mix = require('laravel-mix');

let options = {
  processCssUrls: false,
}

let config = {
  output: {
    chunkFilename: 'assets/js/chunks/[name].js',
    publicPath: '/'
  }
}

if (mix.inProduction()) {
  config.output.chunkFilename = 'assets/js/chunks/[name].[chunkhash].js'
}

mix
  .js('resources/assets/js/app.js', 'public/assets/js')

  .sass('resources/assets/sass/web.scss', 'public/assets/css')
  .sass('resources/assets/sass/fonts.scss', 'public/assets/css')

  .copy('resources/assets/img', 'public/assets/img')
  .copy('node_modules/@fortawesome/fontawesome-free/webfonts','public/assets/webfonts')

  .extract([
      // Libraries...
  ])

  .disableNotifications()
  .webpackConfig(config)
  .options(options)
  .sourceMaps()

if (mix.inProduction()) {
  mix.version()
}
  

И мой .babelrc

 {
  "plugins": ["syntax-dynamic-import"]
}
  

Я попробовал следующее:

  1. Установите babel-preset-es2015 и добавьте es2015 в мои .babelrc предустановки.
  2. Добавить .babel('[...]/vendor.js', '[...]/vendor.es5.js') в мой webpack.mix.js

Как я могу получить vendor.js и manifest.js файл для переноса на ES5? Или, по крайней мере, заставить его работать с IE 11 и iPhone Safari.

Комментарии:

1. Вы нашли решение для этого?

2. @mike.bronner Я обнаружил, что проблема в строке запроса. Я использовал query-string-es5, который тем временем переносится должным образом. github.com/JeffreyWay/laravel-mix/issues /…

Ответ №1:

После некоторого исследования стало ясно, что Laravel Mix 4.x не переносит включенные пакеты. Чтобы добиться этого, добавьте следующее в свой webpack.mix.js файл перед вашими командами mix:

 mix.webpackConfig({
    module: {
        rules: [
            {
                test: /.jsx?$/,
                exclude: /(bower_components)/,
                use: [
                    {
                        loader: 'babel-loader',
                        options: Config.babel()
                    }
                ]
            }
        ]
    }
});
  

Это переопределяет конфигурацию по умолчанию, которая исключает node_modules из переноса.

Комментарии:

1. Жаль, что это ничего не отменяет , по крайней мере, с Laravel-Mix ^5.0.1 , он объединится просто потому, что может (и дублирует laravel-mix по умолчанию, который уже вызывается babel-loader , и повторные вызовы ничего не должны делать).