I have this component which is from parcel's documentation. It said it should work by default.
import React from 'react';
const Router = () => {
...
const ComponentToRender = React.lazy(() => import(`./Pages/${variableCompoentName}/index.js`));
return (
<React.Suspense fallback={<div>Loading...</div>}>
<ComponentToRender />
</React.Suspense>
);
};
export default Router;
But I get an error in the browser saying:
Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec.
2src.7ed060e2.js:1362 Uncaught TypeError: Failed to fetch dynamically imported module: http://localhost:1234/Pages/Home/index.js
What is the way around this? and what am I doing wrong?
here is my package.json
"dependencies": {
"@babel/core": "^7.12.3",
"@babel/preset-env": "^7.12.1",
"@babel/preset-react": "^7.12.5",
"babel-plugin-transform-class-properties": "^6.24.1",
"parcel-bundler": "^1.12.5",
"react": "^16.9.0 || ^17.0.0 || ^18",
"react-dom": "^18.2.0",
...
},
"scripts": {
"start": "parcel public/index.html",
"build": "parcel build public/index.html",
}
Update 1 December 2023
Turns out I get the error because I am using a variable(variableCompoentName
) inside import(./Pages/${variableCompoentName}/index.js
)). because the names were generated at runtime, so they are never compiled.
Now my question is how do I ensure that they always get compiled? How do I go around this issue?
As guerric-p suggest in Why does the server return MIME type of 'text/html' when I import React?
That could be cause you are need also ReactDOM
I'm not used to react but when u use file .js im think you should qoute your components / html
Instead of
Do something like
Or
And make sure on local enviroment like visual studio to run in terminal
npm run start