[React Native] babel plugin config 이슈
IOS 15 업데이트가 나오고 시뮬레이터에서 하도 많은 오류를 보다보니 어떤 오류가 나도 다 xCode 때문일 거라고 생각했다. 그래서 이 요상한 에러로 하루를 날려버렸다 🙀
에러
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
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 파일은 이런상태였다.
해결
역시 공식 도큐먼트만 잘 읽어보면 에러가 생길 일이 없다.
plugins나 presets는 옵션 object를 플러그인의 이름과 함께 []로 묶어 설정할 수 있다.
{
"plugins": ["pluginA", ["pluginA"], ["pluginA", {}]]
}
따라서 이 세가지 설정은 모두 같은 의미를 가진다. plugin을 추가하면서 의미도 모르고 붙여넣기를 하다가 생긴 문제였다. 아래와 같이 수정했다.
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",
},
},
],
],
};
수정후 정상 빌드 되었다.