Webpack Uncaught ReferenceError: babelHelpers is not defined

Webpack Uncaught ReferenceError: babelHelpers is not defined

我正在开发一个 React 应用程序。对于路由,我使用 react-router-dom 和 typesafe-react-router。我的项目是用 webpack 4 和 babel 设置的。为了使用类型安全路由器,我定义了我的路线。

routes.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'
    })
  ]
};

我认为 mybee 问题出在 babel 编译器对导出的 const 枚举有问题。有没有办法让 typescript 的这种语言特性与 babel 一起工作?

删除 @babel/plugin-external-helpers 并使用 @babel/plugin-transform-runtime 为您加载助手。前一个插件希望您提供帮助程序,据我所知,您不是。

您似乎在使用 @babel/plugin-external-helpers。它会阻止 Babel 在每个文件的顶部添加所需的辅助函数。

你可以read more about the plugin in the Babel docs.

为了解决您的问题,我会用 @babel/plugin-transform-runtime 替换插件或手动安装所需的助手。

此外,值得在 GitHub 上检查相关问题: