【发布时间】:2020-05-10 20:22:33
【问题描述】:
我正在开发一个反应应用程序。对于路由,我使用 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 一起使用?
【问题讨论】:
-
似乎是 WebPack 配置问题,出于好奇:您是否考虑过使用
create-react-app来不用担心?
标签: reactjs typescript react-router babeljs webpack-4