IOS 15 업데이트가 나오고 시뮬레이터에서 하도 많은 오류를 보다보니 어떤 오류가 나도 다 xCode 때문일 거라고 생각했다. 그래서 이 요상한 에러로 하루를 날려버렸다 🙀
에러
1
| error: index.js: .plugins[0][1] must be an object, false, or undefined
|
이런 에러가 떴는데 에러 앞쪽에 Babel이 보였던걸로 보아 babel config 문제가 발생한것 같았다.
내 프로젝트에 추가된 babel plugin은 module-resolver
, babel-plugin-styled-components
요 두가지였다.
babel.config.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| module.exports = { presets: ["module:metro-react-native-babel-preset"], plugins: [ [ "babel-plugin-styled-components", "module-resolver", { root: ["./src"], extensions: [ ".ios.ts", ".android.ts", ".ts", ".ios.tsx", ".android.tsx", ".tsx", ".jsx", ".js", ".json", ], alias: { "@": "./src", "@components": "./src/components", "@containers": "./src/containers", "@modules": "./src/modules", "@utils": "./src/utils", "@common": "./src/common", }, }, ], ], };
|
config 파일은 이런상태였다.
해결
역시 공식 도큐먼트만 잘 읽어보면 에러가 생길 일이 없다.
Babeljs.io - Plugin Options
plugins나 presets는 옵션 object를 플러그인의 이름과 함께 []로 묶어 설정할 수 있다.
1 2 3
| { "plugins": ["pluginA", ["pluginA"], ["pluginA", {}]] }
|
따라서 이 세가지 설정은 모두 같은 의미를 가진다.
plugin을 추가하면서 의미도 모르고 붙여넣기를 하다가 생긴 문제였다.
아래와 같이 수정했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| module.exports = { presets: ["module:metro-react-native-babel-preset"], plugins: [ "babel-plugin-styled-components", [ "module-resolver", { root: ["./src"], extensions: [ ".ios.ts", ".android.ts", ".ts", ".ios.tsx", ".android.tsx", ".tsx", ".jsx", ".js", ".json", ], alias: { "@": "./src", "@components": "./src/components", "@containers": "./src/containers", "@modules": "./src/modules", "@utils": "./src/utils", "@common": "./src/common", }, }, ], ], };
|
수정후 정상 빌드 되었다.