๐Ÿ› ๏ธ 'EAS CLI๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ๋Š”๋ฐ๋„ ์—ฌ์ „ํžˆ ๊ฒฝ๊ณ ๊ฐ€ ๋œน๋‹ˆ๋‹ค!' ํ„ฐ๋ฏธ๋„ PATH์˜ ๋น„๋ฐ€์Šค๋Ÿฌ์šด ์‚ถ

๋ฐœํ–‰: (2025๋…„ 12์›” 12์ผ ์˜ค์ „ 08:24 GMT+9)
5 min read
์›๋ฌธ: Dev.to

Source: Dev.to

Introduction

Expo Application Services (EAS)๋ฅผ ์‚ฌ์šฉํ•ด ๋ณธ ์ ์ด ์žˆ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ ๋ฅผ ๋ณธ ์ ์ด ์žˆ๋‹ค๋ฉด:

โ˜… eas-cli@16.28.0 is now available. To upgrade, run npm install -g eas-cli. Proceeding with outdated version.

์—…๊ทธ๋ ˆ์ด๋“œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ , ๊ฐ™์€ ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ๋˜‘๊ฐ™์€ ๊ฒฝ๊ณ ๊ฐ€ ๋œจ๋Š” ๊ฒฝ์šฐ, ์ „ํ˜•์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ํ•จ์ •์— ๋น ์ง„ ๊ฒƒ์ด๋‹ค! ์ด ๊ธ€์—์„œ๋Š” ์™œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€์™€ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์ธ npx eas-cli build๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ฆ‰์‹œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

The Problem: When eas build Fails

์‚ฌ์šฉ์ž๋Š” ์ดˆ๊ธฐ ๋นŒ๋“œ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜์กด์„ฑ ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ–ˆ๋‹ค:

The 'expo-modules-autolinking' package has been found, but it seems to be incompatible with '@expo/prebuild-config'
Error: build command failed.

์ด ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋Š” **์ตœ์‹  ๋ฒ„์ „์˜ eas-cli**๊ฐ€ ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•˜๋„๋ก ํ•ด์•ผ ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์˜ฌ๋ฐ”๋ฅธ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ๋‹ค:

npm install -g eas-cli

ํ•˜์ง€๋งŒ ๋‹ค์‹œ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์„ ๋•Œ CLI๋Š” ์—ฌ์ „ํžˆ ๊ตฌ๋ฒ„์ „์ด๋ผ๊ณ  ๊ฒฝ๊ณ ํ–ˆ๋‹ค:

cathy@Cathys-MacBook-Air-2 workout_app % eas build --platform ios --profile development
โ˜… eas-cli@16.28.0 is now available.
To upgrade, run npm install -g eas-cli.
Proceeding with outdated version.

์ด ๋ฃจํ”„๋Š” ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค! ๋„๊ตฌ๋Š” ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์ง€๋งŒ ๋ช…๋ น์€ ์—ฌ์ „ํžˆ ์˜› ๋ฒ„์ „์„ ์‚ฌ์šฉํ•œ๋‹ค. ์™œ์ผ๊นŒ?

The Root Cause: The Terminalโ€™s PATH Cache

eas build์™€ ๊ฐ™์€ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๋ฉด, ์‰˜(zsh ๋˜๋Š” bash ๋“ฑ)์€ eas ์‹คํ–‰ ํŒŒ์ผ์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค. ๋Œ€์‹  $PATH ๋ผ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ •์˜๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ชฉ๋ก์„ ํƒ์ƒ‰ํ•œ๋‹ค.

  • ์˜› eas ์œ„์น˜: eas-cli๋ฅผ ์ „์—ญ์œผ๋กœ ์ฒ˜์Œ ์„ค์น˜ํ–ˆ์„ ๋•Œ, ์‰˜์€ ํŠน์ • ๊ฒฝ๋กœ(์˜ˆ: /usr/local/bin/eas)์—์„œ ์ฐพ์•˜๋‹ค.
  • ์‰˜ ์บ์‹œ: ์†๋„๋ฅผ ์œ„ํ•ด ํ„ฐ๋ฏธ๋„์€ ํ˜„์žฌ ์„ธ์…˜์—์„œ ์‚ฌ์šฉํ•œ ๋ช…๋ น์˜ ์œ„์น˜๋ฅผ ์บ์‹œ(๊ธฐ์–ต)ํ•œ๋‹ค.
  • ์—…๊ทธ๋ ˆ์ด๋“œ: npm install -g eas-cli๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ƒˆ๋กœ์šด ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์ข…์ข… ๊ฐ™์€ ์œ„์น˜์— ์„ค์น˜๋œ๋‹ค.
  • ์ถฉ๋Œ: ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ ์—ด๋ ค ์žˆ๋Š” ํ„ฐ๋ฏธ๋„ ์„ธ์…˜์€ ์—ฌ์ „ํžˆ ์˜› eas ์‹คํ–‰ ํŒŒ์ผ์— ๋Œ€ํ•œ ์บ์‹œ๋œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํŒŒ์ผ ์ž์ฒด๋Š” ๋ฎ์–ด์จ์กŒ๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ์ด ๊ฒฝ๋กœ๋ฅผ ์ƒˆ๋กœ ๊ณ ์ณ์•ผ ํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๊ตฌ๋ฒ„์ „ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.

์ด ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ๋‹จ๊ณ„์ธ ํ„ฐ๋ฏธ๋„์„ ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ฌ๋Š” ๊ฒƒ์ด ๋ณดํ†ต ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค! ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‰˜์ด ์บ์‹œ๋ฅผ ๋น„์šฐ๊ณ  $PATH๋ฅผ ๋‹ค์‹œ ์Šค์บ”ํ•˜๊ฒŒ ๋œ๋‹ค.

The Elegant Solution: Using npx

์บ์‹œ๋ฅผ ์†๋Œ€๊ฑฐ๋‚˜ ํ„ฐ๋ฏธ๋„์„ ์žฌ์‹œ์ž‘ํ•˜๋Š” ๋Œ€์‹ , ํ˜„๋Œ€์ ์ธ Node.js ๋„๊ตฌ์ธ **npx**๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์ž‘๋™ํ•œ ํ•ด๊ฒฐ์ฑ…:

npx eas-cli build --platform ios --profile development

How npx Saves the Day

  • PATH ์šฐํšŒ: npx(Node Package Execute)๋Š” Node.js ํŒจํ‚ค์ง€ ์‹คํ–‰ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ํ•ต์‹ฌ์€ ์‰˜์˜ ์บ์‹œ๋œ PATH๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค.
  • ์ง€๋Šฅํ˜• ํ•ด์„: npx eas-cli โ€ฆ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋จผ์ € ํ”„๋กœ์ ํŠธ์˜ ๋กœ์ปฌ node_modules์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ฐพ๋Š”๋‹ค. ์—†์„ ๊ฒฝ์šฐ(์ „์—ญ ๋„๊ตฌ์ธ eas-cli์™€ ๊ฐ™์€ ๊ฒฝ์šฐ) ์ฆ‰์‹œ ์ „์—ญ์— ์„ค์น˜๋œ ์ตœ์‹  ๋ฒ„์ „์„ ์‹คํ–‰ํ•œ๋‹ค. ํ˜„์žฌ ์‰˜ ์„ธ์…˜์— ๋‚จ์•„ ์žˆ๋Š” ์˜ค๋ž˜๋œ ์บ์‹œ๋ฅผ ๋ฌด์‹œํ•œ๋‹ค.

npx๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ์Šคํ…œ์— ์„ค์น˜๋œ ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์˜ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์–ด, ์‰˜ ์บ์‹œ์™€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ธํ•œ ๋ชจ๋“  ๊ณจ์น˜๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

Key Takeaways for Developers

  • ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…: ์ „์—ญ ๋„๊ตฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ํ„ฐ๋ฏธ๋„์„ ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ฐ๋‹ค.
  • ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ์ฑ…: ๋ช…๋ น ์•ž์— npx๋ฅผ ๋ถ™์ธ๋‹ค(์˜ˆ: npx ).

๊ณ„์† ์ฝ”๋”ฉํ•˜๊ณ , ์ฆ๊ฑฐ์šด ๋นŒ๋“œ ๋˜์„ธ์š”! ๐Ÿš€

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

TwoScreens: React Native ๋„ค๋น„๊ฒŒ์ด์…˜ ์Šคํ„ฐ๋”” Expo + ํƒญ ๋„ค๋น„๊ฒŒ์ด์…˜ + ํ™”๋ฉด ์ „ํ™˜ ํ•™์Šต ํ”„๋กœ์ ํŠธ ๐Ÿš€

๊ฐœ์š”: React Native ๋„ค๋น„๊ฒŒ์ด์…˜์˜ ๊ธฐ๋ณธ์„ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํ•™์Šต ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. Expo์™€ React Nav๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋“œ๋Ÿฌ์šด ์ „ํ™˜์„ ๊ตฌํ˜„ํ•œ ๋‘ ๊ฐœ์˜ ํ™”๋ฉด์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Javascript(NodeJs)์—์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์–ด๋–ป๊ฒŒ ๋ฐ›๋‚˜์š”?

promptโ€‘sync๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Node.js์—๋Š” ํ„ฐ๋ฏธ๋„์—์„œ ์ž…๋ ฅ์„ ๋™๊ธฐ์‹์œผ๋กœ ์ฝ๋Š” builtโ€‘in ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, promptโ€‘sync์™€ ๊ฐ™์€ external library๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

plain JS๋ฅผ ์‚ฌ์šฉํ•ด React Native ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๊ธ€์„ ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ, expo๋ฅผ ํ™œ์šฉํ•ด ์žฅ์ ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

Forem ๋กœ๊ณ  https://media2.dev.to/dynamic/image/width=65,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%...