Ich verwende reagieren Router mit Komponente verzögertes Laden und mit Webpack als Bündler , wenn ich auf die Homepage zugreifen /
kann ich im Netz Registerkarte sehen , dass die bundle.js
geladen wird , und auch wenn ich auf einem bestimmten Element in der Seitenleiste der Korrespondent Komponente wird beispielsweise erfolgreich mit seinem Dateinamen geladen. 0.bundle.js
Wenn ich jedoch direkt von der Suchleiste zu einer verschachtelten Route navigiere (Beispiel http://127.0.0.1:8080/forms/select
), wird folgende Fehlermeldung angezeigt:
GET
http://127.0.0.1:8080/forms/bundle.js
net :: ERR_ABORTED 404 (nicht gefunden)
Dieser Fehler zeigt an, dass der bundle.js
nicht geladen ist, was bedeutet, dass die anderen Chunks nicht geladen werden können.
webpack.config.js
const webpack = require('webpack');
module.exports = {
entry: './src/index.js',
module: {
rules: [],
},
resolve: {
extensions: ['*', '.js', '.jsx'],
},
output: {
path: __dirname + '/dist',
publicPath: '/',
filename: 'bundle.js',
},
plugins: [new webpack.HotModuleReplacementPlugin()],
devtool: 'cheap-module-eval-source-map',
devServer: {
contentBase: './dist',
hot: true,
historyApiFallback: true,
},
};
.babelrc
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
],
"plugins": ["@babel/plugin-syntax-dynamic-import"]
}
route.js
import { lazy } from 'react';
const Forms = lazy(() => import('../components/uiViews/Forms'));
const SelectForm = lazy(() => import('../components/uiViews/Forms/SelectForm'));
const FormValidation = lazy(() => import('../components/uiViews/Forms/FormValidation'));
const routes = [
{
icon: 'form',
label: 'forms',
path: '/forms',
component: Forms,
children: [
{
icon: 'select',
label: 'selectInput',
path: '/forms/select',
component: SelectForm,
},
{ icon: 'issues-close', label: 'formValidation', path: '/forms/validation', component: FormValidation },
{
icon: 'form',
label: 'wizardForm',
path: '/forms/wizard',
component: WizardForm,
}],
},
];
export default routes;
Routen rendern
<Suspense fallback={<div className="spin-loading"> <Spin size="large" /></div>}>
{routes.map((route, i) => {
return route.component ? RouteWithSubRoutes( {...route},`r${i}`) : null;
})}
</Suspense>
....
function RouteWithSubRoutes(route,key) {
return route.children ? (
route.children.map((subRoute,j) => {
return RouteWithSubRoutes(subRoute,`sr${j}`);
})
) : (
<Route key={key} path={route.path} exact component={() =>route.component? <route.component />:<ComingSoon/>} />
);
}
quelle
publicPath
,entry
und / oderoutput
Pfade, müssen einepath.resolve()
oder zwei drin.Antworten:
Nachdem ich einige Tage lang verschiedene Lösungen ausprobiert hatte, fand ich endlich diese , die meinen Tag rettet:
quelle