Aliased imports are not supported anymore when creating a new typescript react app
See original GitHub issueI created a new React-typescript app via this command with react@17.0.2 and typescript@4.5.2:
npx create-react-app my-app --template typescript
Then I decided to define the alias path as I did many times before. I created the tsconfig.paths.json in the root of my app.
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"components/*": ["/components/*"],
"routes/*": ["/routes/*"],
"constants/*": ["/constants/*"]
}
}
}
Then I added the extend property to the tsconfig.json file:
{
"extends": "./tsconfig.paths.json",
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": [
"src"
]
}
Also, I installed react-app-rewired@2.1.8 and created the config-override.js:
const path = require('path');
module.exports = function override(config) {
config.resolve = {
...config.resolve,
alias: {
...config.alias,
'components': path.resolve(__dirname, 'src/components/*'),
'routes': path.resolve(__dirname, 'src/routes/*'),
'constants': path.resolve(__dirname, 'src/constants/*'),
}
}
return config;
}
So I reopened my IDE (VSCode) and ran npm start. I must mention I changed scripts in the package.json before running the start command.
{
.
.
.
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-app-rewired eject"
}
.
.
.
}
After running the start command, this message was displayed in a terminal, and compiling is failed:
The following changes are being made to your tsconfig.json file: -compilerOptions.paths must not be set (aliased imports are not supported)
*Failed to compile.
./src/App.tsx Module not found: Can’t resolve ‘components’ in …*
So I started to search about this issue to resolve it. I found many approaches that I will mention some of them below:
1. Go to your jsconfig.json file add the base URL to be “.”
"compilerOptions": {
"baseUrl": ".",
...
Then you can directly import stuff from the src directory
import Myfile from "src/myfile.js"
Result ==> DID NOT WORK!
2. This problem is solved by an alias for rewire. Install react-app-rewire-alias then create config-override.js file:
const {alias, configPaths} = require('react-app-rewire-alias')
module.exports = function override(config) {
alias(configPaths())(config)
return config
}
Result ==> DID NOT WORK!
3. Using craco@6.4.1 package
-
Install craco and craco-alias
npm install @craco/craco --saveandnpm i -D craco-alias -
Create
tsconfig.paths.jsonin root directory{ "compilerOptions": { "baseUrl": "./src", "paths": { "@components/*" : ["./components/*"] } } } -
Extend
tsconfig.paths.jsonintsconfig.json{ “extends”: “./tsconfig.paths.json”, //default configs… }
-
Create
craco.config.jsin the root directoryconst CracoAlias = require("craco-alias"); module.exports = { plugins: [ { plugin: CracoAlias, options: { source: "tsconfig", // baseUrl SHOULD be specified // plugin does not take it from tsconfig baseUrl: "./src", /* tsConfigPath should point to the file where "baseUrl" and "paths" are specified*/ tsConfigPath: "./tsconfig.paths.json" } } ] }; -
in
package.jsonswap"start": "react-scripts start"with"start": "craco start"
Result ==> DID NOT WORK!
I’m confused because I used the alias path many times before, but it does not work now. I don’t want to eject my app but using the alias path is helpful.
This is my question in the Stackoverflow community.
Issue Analytics
- State:
- Created 2 years ago
- Reactions:36
- Comments:14

Top Related StackOverflow Question
It’s 2022 year. React 18 released, CRA v5 released, nodejs imports option exists, but alias from box not supported =)
Using Craco could be a short-term solution, but why do they not work out of the box anymore? Weird stuff