Webpack Uncaught ReferenceError: babelHelpers не определен

Я разрабатываю приложение для реагирования. Для маршрутизации я использую react-router-dom и typesafe-react-router. Мой проект настроен с помощью webpack 4 и babel. Чтобы использовать безопасный маршрутизатор, я определил свои маршруты.

маршруты.ts

import { route } from 'typesafe-react-router';

export enum RouteNames {
  HOME = 'HOME',
  ABOUT = 'ABOUT'
}

export const Routes = {
  [RouteNames.HOME]: route(''),
  [RouteNames.ABOUT]: route('about')
};

маршруты также используются в других файлах, таких как App.tsx

    <div className="AppContainer">
      <Router>
        <h1>My React App</h1>
        <img src={logo} />
        <div className="NavLink">
          <Link to={Routes[RouteNames.HOME].create({})}>Home</Link>
          {' | '}
          <Link to={Routes[RouteNames.ABOUT].create({})}>About</Link>
        </div>

        <Switch>
          <Route
            path={Routes[RouteNames.HOME].template()}
            exact
            component={HomePage}
          />
          <Route
            path={Routes[RouteNames.ABOUT].template()}
            component={AboutPage}
          />
          <Route component={NotFoundPage} />
        </Switch>
      </Router>
    </div>

во время компиляции все нормально, но я получаю ошибки времени выполнения:

routes.ts:8 Uncaught ReferenceError: babelHelpers is not defined
    at Module../src/pages/routes.ts (routes.ts:8)
    at __webpack_require__ (bootstrap:726)
    at fn (bootstrap:100)
    at Module../src/pages/index.ts (index.ts:1)
    at __webpack_require__ (bootstrap:726)
    at fn (bootstrap:100)
    at Module../src/app/App.tsx (App.tsx:1)
    at __webpack_require__ (bootstrap:726)
    at fn (bootstrap:100)
    at Module../src/bootstrap/index.tsx (index.tsx:1)

вот мой файл .babelrc:

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react",
    "@babel/preset-typescript"
  ],
  "plugins": [
    "@babel/plugin-external-helpers",
    "@babel/plugin-proposal-class-properties",
    "@babel/plugin-proposal-object-rest-spread"
  ]
}

а вот мой webpack.config.js

const path = require('path');
const { CheckerPlugin } = require('awesome-typescript-loader');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './src/bootstrap/index.tsx',
  devtool: 'source-map',
  resolve: {
    extensions: ['.ts', '.tsx', '.js', '.less']
  },
  output: {
    path: path.join(__dirname, '/dist'),
    filename: 'bundle.min.js'
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx|tsx|ts)$/,
        exclude: /node_modules/,
        use: ['babel-loader']
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      },
      {
        test: /\.less$/,
        use: [
          {
            loader: 'style-loader'
          },
          {
            loader: 'css-loader'
          },
          {
            loader: 'less-loader',
            options: {
              javascriptEnabled: true
            }
          }
        ]
      },
      {
        test: /\.(png|jpg|gif|svg)$/i,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 10000
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new CheckerPlugin(),
    new HtmlWebpackPlugin({
      template: './src/bootstrap/index.html'
    })
  ]
};

Я думаю, что проблема в том, что у компилятора babel есть проблемы с экспортируемыми константными перечислениями. Есть ли способ заставить эту языковую функцию машинописного текста работать с Babel?


person Alex    schedule 24.01.2020    source источник
comment
Похоже на проблему с конфигурацией WebPack, из любопытства: вы рассматривали возможность использования create-react-app, чтобы не беспокоиться об этом?   -  person r3dst0rm    schedule 24.01.2020


Ответы (2)



Удалите @babel/plugin-external-helpers и используйте @babel/plugin-transform-runtime для загрузки помощников. Прежний плагин ожидает, что вы предоставите помощников, которыми, как я вижу, вы не являетесь.

person Marcelo Cardoso    schedule 25.01.2020