I am trying to use relative path using babel-plugin-module-resolver
, but no matter what I make, it doesn't work. I've read the React Native docs about it, and the babel lib docs too, but the metro bundler is unable to resolve the module. Also I'm using typescript.
Here is my config files:
tsconfig.json
{"compilerOptions": {"target": "esnext","module": "commonjs","lib": ["es2017"],"allowJs": true,"jsx": "react-native","noEmit": true,"isolatedModules": true,"strict": true,"moduleResolution": "node","baseUrl": "./src","paths": {"@/*": ["./src/*"] },"allowSyntheticDefaultImports": true,"esModuleInterop": true,"skipLibCheck": false,"resolveJsonModule": true },"exclude": ["node_modules", "babel.config.js", "metro.config.js", "jest.config.js" ]}
babel.config.js
module.exports = { presets: ['module:metro-react-native-babel-preset'], plugins: [ ['module-resolver', { root: ['./'], extensions: ['.ios.js', '.android.js', '.ts', '.tsx', '.json'], alias: {'@/*': './src/*', }, }, ], ],};
package.json
{"name": "myapp","version": "0.0.1","private": true,"scripts": {"android": "react-native run-android","ios": "react-native run-ios","start": "react-native start","test": "jest --watch --onlyChanged","lint": "eslint . --ext .js,.jsx,.ts,.tsx --fix" },"dependencies": {"@react-native-community/async-storage": "^1.12.1","@react-navigation/native": "^6.0.6","@react-navigation/native-stack": "^6.2.5","@types/styled-components-react-native": "^5.1.3","axios": "^0.25.0","formik": "^2.2.9","react": "16.14.0","react-dom": "^17.0.2","react-native": "0.66.4","react-native-safe-area-context": "^3.3.2","react-native-screens": "^3.10.2","react-native-svg": "^12.1.1","styled-components": "^5.3.3","yup": "^0.32.11" },"devDependencies": {"@babel/core": "^7.12.9","@babel/runtime": "^7.12.5","@react-native-community/eslint-config": "^2.0.0","@types/axios": "^0.14.0","@types/enzyme": "^3.10.11","@types/jest": "^26.0.23","@types/react-native": "^0.66.4","@types/react-test-renderer": "^17.0.1","@typescript-eslint/eslint-plugin": "^5.7.0","@typescript-eslint/parser": "^5.7.0","babel-eslint": "^10.1.0","babel-jest": "^26.6.3","babel-plugin-module-resolver": "^4.1.0","enzyme": "^3.11.0","enzyme-adapter-react-16": "^1.15.6","eslint": "^7.14.0","eslint-config-airbnb": "^19.0.4","eslint-config-prettier": "^8.3.0","eslint-plugin-import": "^2.25.4","eslint-plugin-jsx-a11y": "^6.5.1","eslint-plugin-module-resolver": "^1.4.0","eslint-plugin-react": "^7.28.0","eslint-plugin-react-hooks": "^4.3.0","jest": "^26.6.3","jest-environment-enzyme": "^7.1.2","jest-enzyme": "^7.1.2","metro-react-native-babel-preset": "^0.66.2","react-test-renderer": "17.0.2","typescript": "^4.4.4" },"resolutions": {"@types/react": "^17" },"jest": {"preset": "react-native","moduleFileExtensions": ["ts","tsx","js","jsx","json","node" ] }}
PS: I've read something about using package.json file only with name attribute, but I don't like this solution because if I want to use a third part lib I have to add to this new package.json file.
PS2: I'm using Windows.