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 上检查相关问题:
我正在开发一个 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 上检查相关问题: