2024. 11. 24. 20:11γStudy_Develop/React Native

νλ‘μ νΈλ₯Ό λ§€λ² μ§ννλ©΄μ
babelμ΄λ config νμΌμ 건λλ €μΌ ν μΌμ΄ μκΈ°λ©΄
μ΄ν΄νμ§ λͺ»νμ± λ¬΄μ§μ±μΌλ‘ λ°λΌλ§ νλ κ²½νμ΄ μμ΄μ.
κ·ΈλμμΈμ§ μ΄λ° νμΌλ€μ 건λλ €μΌ ν μΌμ΄ μκΈ°λ©΄ μλ¬λ λ§μ΄ λ¨κ³ λκ° μννκ² μ μ€νμ΄ λμ§λ μμλ κ±° κ°μμ.
μ΄λ² κΈ°νμ κ° νμΌλ€μ μν μ°μ λμ λ±λ±μ 곡λΆν΄λ³΄λ € ν©λλ€!
babelμ΄λ λμ§?
μ°μ Babelμ μ£Όμ μν μ μ΅μ js(es6, es7 λ° κ·Έ μ΄μ)λ₯Ό μ¬μ©νλ μ½λκ° λΈλΌμ°μ λ²μ κ³Ό μκ΄μμ΄
λ€μν js μμ§μμ μλν μ μκ² νλ κ²μ λλ€.
μ΄λ νΉν μ΅μ κΈ°λ₯μ μ§μνμ§ μλ μ€λλ λΈλΌμ°μ μμλ μ½λκ° μλν μ μκ² ν΄ μ€λλ€!
λ°λ²¨μ΄ λ±μ₯ν¨μΌλ‘ λΈλΌμ°μ κ° νΈνμ±μ μ§μΌμΌ νλ ν¬λ‘μ€ λΈλΌμ°μ§ μ΄μλ₯Ό μ΄λ μ λ ν΄κ²°νλ€κ³ 보λλ°μ
μκ°μ΄ μ§λλ©° λ¨μμ΄ es6 to es5 λ³νλΏλ§ μλλΌ λ¦¬μ‘νΈμ jsxλ¬Έλ², νμ μ€ν¬λ¦½νΈμ κ°μ μ μ νμ μΈμ΄, μ΅μ λ¬Έλ² λ±μ λν λ³νμ μ 곡νλ©° νλ‘ νΈ κ°λ°μ μμ΄ νμμ μΈ μμλ‘ μ리 μ‘μμ΅λλ€!!
μ΄λ! λ°λ²¨μμ λ³ννλ νμλ₯Ό νΈλμ€νμΌλ§ νλ€κ³ μΉνκ³ ,
κ³ μμ€ μΈμ΄ -> μ μμ€ μΈμ΄μ μ»΄νμΌλ§κ³Ό μ°¨μ΄λ₯Ό λκΈ° μν΄ νΈλμ€νμΌλ§μ΄λΌκ³ νλ κ² κ°μ΅λλ€.
λ°λ²¨ μλν΄ λ³΄κΈ°
λ°λ²¨ 곡μμ¬μ΄νΈμμ μ΄λ κ² λ³νμ νλμ 보μ¬μ£Όλ κΈ°λ₯λ μ 곡νκ³ μμ΅λλ€.

μΌμͺ½μ View, Text, Buttonνκ·Έλ₯Ό μ¬μ©ν λ°©μμ μΌλ°μ μΌλ‘ μμ±νλ μ½λ μ€νμΌμ λλ€.
μ΄ μ½λλ Babelμ΄λ μ μ¬ν js μ»΄νμΌλ¬λ₯Ό ν΅ν΄ μ²λ¦¬λ λ,
jsx κ΅¬λ¬Έμ΄ React ν¨μ νΈμΆ ννλ‘ λ³νλλ©°, λ λ²μ§Έ μμ μ²λΌ λ°λκ² λ©λλ€.
Babelμ _jsxμ _jsxs κ°μ ν¨μλ₯Ό μ¬μ©νμ¬ μμλ₯Ό μμ±νλλ°
μ΄λ React κ° μ»΄ν¬λνΈλ₯Ό μ€ν μμ μ μ΅μ νλ λ°©μμΌλ‘ μ²λ¦¬νκΈ° μν κ²μ λλ€.
μ΄λ¬ν λ³νμ μ½λμ μ±λ₯μ λμ¬μ£Όλ©°, λΈλΌμ°μ κ° μμμ μμ±μ μ²λ¦¬νκΈ°μ λ ν¨μ¨μ μΈ κ΅¬μ‘°λ‘ λ§λ€μ΄μ€λλ€.
μ¬μ© λ°©λ²
1. ν¨ν€μ§ μ€μΉ
npm install --save-dev @babel/core @babel/cli @babel/preset-env
2. νλ‘μ νΈ λ£¨νΈμ babel.config.jsonμ΄λΌλ μ΄λ¦μ ꡬμ±νμΌμ λ§λ λ€.
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"edge": "17",
"firefox": "60",
"chrome": "67",
"safari": "11.1"
},
"useBuiltIns": "usage",
"corejs": "3.6.5"
}
]
]
}
곡μλ¬Έμμ λμμλ μμ!!
μ§μνλ €λ λΈλΌμ°μ μ λ§κ² ν΄λΉ λΆλΆμ μ‘°μ ν΄μ£Όμ΄μΌ ν©λλ€.
λμ± μμΈν λ΄μ©μ λ°λ²¨ 곡μ λ¬Έμλ₯Ό μ°Έκ³ ν΄ λ³΄μκ³ !
λ°λ²¨μ μ¬μ©νλ©΄ μ΅μ λ¬Έλ²μ λͺ¨λ μ¬μ©ν μ μλ€κ³ μ°©κ°νμ μ¬μ΄λ°μ,
λ°λ²¨μ μ¬μ©νλλΌλ ν리νκ³Ό νλ¬κ·ΈμΈμ λν μ μ ν μ€μ μ΄ νμν©λλ€!
νλ¬κ·ΈμΈμ΄λ?
λ°λ²¨μ΄ μ΄λ»κ² μ½λλ₯Ό λ³νν μ§μ λν λ£°μ μ μν΄ μ£Όλ μμ
νμ/λͺ©μ μ μν΄ λͺ¨μλμ νλ¬κ·ΈμΈμ μ§ν©μ ν리μ (preset)μ΄λΌκ³ ν©λλ€.
@babel/preset-react : 리μ‘νΈ κ°λ°νκ²½μμ νμν νλ¬κ·ΈμΈλ€μ λͺ¨μλμ ν리μ
@babel/preset-env : λμ νκ²½μ νμν ꡬ문 λ³νμ μΈμΈνκ² κ΄λ¦¬ν νμ μμ΄ μ΅μ jsλ₯Ό μ¬μ©ν μ μκ²
@babel/preset-typescript
@babel/preset-flow
@babel/preset-jest
λ± λ€μν ν리μ μ΄ μ‘΄μ¬ν©λλ€!
λμ νλ‘μ νΈ λ΄μ babel.config.js
module.exports = {
presets: ['module:@react-native/babel-preset'],
};
λμ babel.config.js νμΌμ μ΄ν΄λ³΄λ©΄
λ΄κ° μ μΈν΄λμ§ μμμ§λ§ react native νλ‘μ νΈλ₯Ό μμ±νμ λ μλμΌλ‘ μμ±λμμ΄μ
μ΄λ React native νλ‘μ νΈμ νμν λλΆλΆμ μΌλ°μ μΈ Babelμ€μ μ νμν ꡬμ±μ΄ μ΄λ―Έ ν¬ν¨λμ΄ μμ΄μ.
μ΄λ @babel/preset-react@babel/preset-envμ κ°μ μΆκ° μ¬μ μ€μ μ μλμΌλ‘ ν¬ν¨ν νμκ° μμμ μλ―Έν©λλ€!
μ΄λ κ² νλ©΄ React Native νλ‘μ νΈμ λν Babel ꡬμ±μ΄ λ κ°λ¨νκ³ ν¨μ¨μ μ΄κ² μ£ ~?
νΉμ μ¬μ©μ μ μλ μΆκ° Banelνλ¬κ·ΈμΈμ΄ νμν κ²½μ° Babelꡬμ±μ νμ₯ν μ μμ§λ§
λλΆλΆμ React Native νλ‘μ νΈμμλ '@react-native/babel-preset'λ§μΌλ‘λ μΆ©λΆν©λλ€!
ν΄λ¦¬νμ΄λ?
μ΄μ νκ²½μ λλ½λ jsκΈ°λ₯μ μΆκ°νλ μ½λμ λλ€.
μ΅μ jsλ₯Ό μ΄μ λ²μ μΌλ‘ λ³ννλ λ°©λ²μ babelμ μλ €μ£Όλ ν리μ κ³Όλ λ€λ₯Έ κ°λ μ λλ€!
ν΄λ¦¬νμ λ°νμμ λ±λ‘λμ§ μμ λ©μλλ κΈ°λ₯μ μ£Όμ ν΄ μ£Όλ μν !!
ν΄λ¦¬νμ 'Promise', 'fetch', 'Array.prototype.includes' λ° μ΄μ λ²μ μ λΈλΌμ°μ μμ μ§μλμ§ μμ μ μλ κΈ°ν κΈ°λ₯κ³Ό κ°μ νΉμ js api λλ κΈ°λ₯μ μΆκ°νλ λ° μμ£Ό μ¬μ©μ΄ λ©λλ€!
ν΄λ¦¬ν μ¬μ© λ°©λ²!
κ·ΈλΌ ν΄λΉ κΈ°λ₯μ μ΄λ»κ² μ¬μ©νλλ?
ν΄λ¦¬νμ μ¬μ©νλ λ°©λ²μ ν¬κ² 3κ°μ§κ° μμ΄μ.
1. @babel/polyfillλ₯Ό import ν΄μ μ¬μ©νλ€.
import '@babel/polyfill';
λͺ¨λ ν΄λ¦¬νμ΄ λΆλ¬μμ Έ νΈλ¦¬νλ€λ μ₯μ μ΄ μκ² μ§λ§
λ΄κ° μ¬μ©νμ§ μλ ν΄λ¦¬νκΉμ§ λΆλ¬μμ Έ λ²λ€μ ν¬κΈ°κ° μ»€μ§ μ μλ€λ λ¨μ μ΄ μκ² μ£ ?
2. core-jsμμ νμν ν΄λ¦¬νλ§ import ν΄μ μ¬μ©νλ€.
μ νμ μΌλ‘ νμν ν΄λ¦¬νλ§ import νλ λ°©μμ΄μμ!
μ΄λ κ² νλ©΄ λ²λ€μ ν¬κΈ°λ₯Ό μ€μΌ μ μκ² μ£ ?
νμ§λ§ μ΄λ λ§€λ² import νκΈ°κ° λ²κ±°λ‘κ³ , λλ½νλ μ€μλ λ°μν μ μλ€λ λ¨μ μ΄ μμ΄μ
3. @babel/preset-env ν리μ μ μ¬μ©νλ€.
μλμΌλ‘ ν΄λ¦¬νμ΄ ν¬ν¨λ©λλ€!
νμ§λ§ 볡μ‘ν μ€μ μ΄λ λ²λ€ ν¬κΈ°κ° μ¦κ°λλ€λ λ¨μ μ΄ μ‘΄μ¬ν΄μ!
μ¬κΈ°κΉμ§ babelμ λν μμ£Ό κΈ°λ³Έμ μΈ κ°λ λ§ λ£μμ΄μ!
λ μμΈν λ΄μ©μ ν΄λΉ 곡μ λ¬Έμλ₯Ό μ°Έκ³ ν΄ μ£Όμλ©΄ μ’μ κ±° κ°μ΅λλ€!!π