Неожиданный токен, указанный при загрузке import () с Webpack 4.24.0 или выше

#javascript #reactjs #webpack

#javascript #reactjs #webpack

Вопрос:

Я выполнял миссию по обновлению зависимостей и обнаружил, что при обновлении Webpack до 4.24.0 или выше я получаю этот сбой:

 ERROR in ./src/js/components/App.jsx 35:9
Module parse failed: Unexpected token (35:9)
You may need an appropriate loader to handle this file type.
| import ReactModal from 'react-modal';
| var RoomListings = React.lazy(function () {
>   return import('./RoomListings.jsx');
| });
| var RoomDetails = React.lazy(function () {
 @ ./src/js/index.js 3:0-39 6:74-77
 @ multi ./src/js/index.js
  

При импорте происходит сбой, но что расстраивает, так это то, что ничего не изменилось ни в моем Webpack, ни в конфигурации Babel, которые приведены ниже:

webpack.config.js

 module.exports = {
  entry: ["./src/js/index.js"],
  output: {
    path: PATHS.build,
    filename: "js/[name].js"
  },
  devServer: {
    contentBase: path.join(__dirname, 'src'),
    publicPath: '/'
  },
  module: {
    rules: [
      { test: /.js$/, exclude: /node_modules/, loader: "babel-loader"},
      { test: /.jsx$/, loader: 'babel-loader', exclude: /node_modules/ },
      { test: /.html$/, loader: "html-loader" },
      { test: /.css$/, use: ['style-loader', 'css-loader'] },
      { test: /.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] },
      { test: /.(png|jp(e*)g|svg)$/,  use: [{
        loader: 'url-loader',
        options: { 
            limit: 8000, // Convert images < 8kb to base64 strings
            name: 'images/[hash]-[name].[ext]'
        } 
      }]}
    ]
  },
  plugins: [
    new HtmlWebPackPlugin({
      template: "./src/index.html",
      filename: "./index.html"
    })
  ]
};
  

.babelrc

 {
  "presets": ["@babel/env", "@babel/react"],
  "plugins": ["add-react-displayname", "@babel/plugin-syntax-dynamic-import", "emotion"],
  "env": {
    "test": {
      "plugins": ["dynamic-import-node"]
    }
  }
}
  

Я предполагаю, что что-то либо отсутствует, либо неправильно настроено, но после нескольких часов поиска в SO и Google ни один из существующих ответов, похоже, не помогает.

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

1. Я думаю, это из-за function() {...} . Это недопустимый синтаксис JavaScript. Либо назовите функции, либо используйте () => {...} , если вы не хотите давать им имена.

2.Я полагаю, что Babel преобразует его в function() . Если вы посмотрите на исходный код, я использую () => {...} github.com/mwinteringham/restful-booker-platform/blob/master/ui / … предложения?

3. Можете ли вы извлечь пример в небольшой автономный репозиторий, который я могу создать?