Estoy usando el enrutador de reacción con carga lenta de componentes y uso Webpack como un paquete , cuando accedo a la página de inicio / puedo ver en la pestaña de red que bundle.jsestá cargado y también cuando hago clic en un elemento específico en la barra lateral del componente correspondiente se carga correctamente con su nombre de archivo, por ejemplo 0.bundle.js, sin embargo, cuando navego directamente desde la barra de búsqueda a una ruta anidada (ejemplo http://127.0.0.1:8080/forms/select) obtengo un error como este:
OBTENER
http://127.0.0.1:8080/forms/bundle.jsnet :: ERR_ABORTED 404 (no encontrado)
Este error indica que bundle.jsno está cargado, lo que significa que no puede cargar los otros fragmentos.
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"]
}
routes.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;
representación de rutas
<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/>} />
);
}
fuente

publicPath,entryy / ooutputcaminos, necesitan unapath.resolve()o dos allí.Respuestas:
Después de algunos días de probar diferentes soluciones, finalmente encontré esta que me salva el día:
fuente