๐Ÿš€ Vite ๋ฐฐํฌ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ: xdg-open, CJS API, npm ๋ฒ„์ „ ์ถฉ๋Œ ๋ฌธ์ œ ๋ถ„์„

@leekh8 ยท March 05, 2025 ยท 3 min read

Code N Solve ๐Ÿ“˜: Vite ๋ฐฐํฌ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ - xdg-open, CJS API, npm ๋ฒ„์ „ ์ถฉ๋Œ ๋ฌธ์ œ ๋ถ„์„

Vite ํ”„๋กœ์ ํŠธ๋ฅผ Render์—์„œ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ช‡๊ฐ€์ง€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ๋ธŒ๋ผ์šฐ์ € ์ž๋™ ์‹คํ–‰ ๋ฌธ์ œ, ์ดํ›„์—๋Š” Vite์˜ CJS API ๊ฒฝ๊ณ , npm ๋ฒ„์ „ ์ถฉ๋Œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

๊ฐ๊ฐ์˜ ์˜ค๋ฅ˜๋ฅผ ๋ถ„์„ํ•˜๊ณ  ํ•ด๊ฒฐํ•œ ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

๐Ÿšจ 1. xdg-open ์˜ค๋ฅ˜: "spawn xdg-open ENOENT"

โŒ ๋ฌธ์ œ ์ƒํ™ฉ

Vite ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

Error: spawn xdg-open ENOENT
    at ChildProcess._handle.onexit (node:internal/child_process:284:19)
    at onErrorNT (node:internal/child_process:477:16)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

๐Ÿง ์›์ธ ๋ถ„์„

  • xdg-open์€ Linux ํ™˜๊ฒฝ์—์„œ ๊ธฐ๋ณธ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ฌ๋Š” ๋ช…๋ น์–ด.
  • Render์—์„œ vite dev ์‹คํ–‰ ์‹œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ž๋™์œผ๋กœ ์—ด๋ ค๊ณ  ํ•˜์ง€๋งŒ, ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—๋Š” xdg-open์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜์ง€ ์•Š์Œ.
  • Vite ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ ์‹œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ž๋™์œผ๋กœ ์—ด์ง€ ์•Š๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์„ค๋ช…ํ•จ.1

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. Render ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถ”๊ฐ€

  • BROWSER=none
  • Render ํ™˜๊ฒฝ์—์„œ BROWSER=none์„ ์„ค์ •ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ์ž๋™ ์‹คํ–‰์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

๋˜๋Š” 2. xdg-utils ํŒจํ‚ค์ง€ ์„ค์น˜

  • ๋งŒ์•ฝ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ xdg-open์ด ์—†์„ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‹คํ–‰ํ•œ๋‹ค.
  • sudo apt update && sudo apt install xdg-utils
  • Ubuntn๋‚˜ Debian ๊ณ„์—ด์—์„œ xdg-open์„ ์„ค์น˜ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ, CentOS/RHEL ๊ณ„์—ด์—์„œ๋Š” sudo yum install xdg-utils ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.2

๐Ÿšจ 2. Vite CJS API ์‚ฌ์šฉ ๊ฒฝ๊ณ 

โŒ ๋ฌธ์ œ ์ƒํ™ฉ

  • Vite ์‹คํ–‰ ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋จ.
  • The CJS build of Vite's Node API is deprecated.
    See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.

๐Ÿง ์›์ธ ๋ถ„์„

  • Vite 5 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” CommonJS(CJS) ๋Œ€์‹  ECMAScript Module(ESM) ๋ฐฉ์‹ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•จ.3
  • ๊ธฐ์กด์˜ vite.config.js ํŒŒ์ผ์ด CommonJS ๋ฐฉ์‹์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์Œ.
  • Vite ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” ESM(ECMAScript Module) ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•  ๊ฒƒ์„ ๊ถŒ์žฅ.

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. vite.config.js ํŒŒ์ผ์„ vite.config.mjs๋กœ ๋ณ€๊ฒฝ

  • mv vite.config.js vite.config.mjs

๋˜๋Š” 2. ๊ธฐ์กด์˜ require ๊ตฌ๋ฌธ์„ import๋กœ ๋ณ€๊ฒฝ

  • import { defineConfig } from "vite"
    
    export default defineConfig({
      server: {
        host: true,
      },
    })

๋˜๋Š” 3. package.json์— ๋‹ค์Œ ์„ค์ • ์ถ”๊ฐ€

  • {
    "type": "module"
    }
  • Vite ๊ณต์‹ ๋ฌธ์„œ์—์„œ ESM ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค.3

๐Ÿšจ 3. npm ๋ฒ„์ „ ์ถฉ๋Œ: "EBADENGINE" ์˜ค๋ฅ˜

โŒ ๋ฌธ์ œ ์ƒํ™ฉ

Docker ๋นŒ๋“œ ๊ณผ์ •์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

npm error code EBADENGINE
npm error engine Unsupported engine
npm error engine Not compatible with your version of node/npm: npm@11.1.0
npm error notsup Required: {"node":"^20.17.0 || >=22.9.0"}
npm error notsup Actual:   {"npm":"10.8.2","node":"v18.20.7"}

๐Ÿง ์›์ธ ๋ถ„์„

  • npm install -g npm@latest ์‹คํ–‰ ์‹œ npm@11.1.0์„ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ, ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ Node.js ๋ฒ„์ „์ด 18.20.7๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š์Œ.
  • npm@11.1.0์€ Node.js 20.17.0 ์ด์ƒ์ด ํ•„์š”ํ•จ.4
  • Node.js ๊ณต์‹ ๋ฌธ์„œ์—์„œ ํŠน์ • npm ๋ฒ„์ „์ด ํŠน์ • Node.js ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅํ•จ.5

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. Node.js ๋ฒ„์ „์„ 20 ์ด์ƒ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ

  • Dockerfile์—์„œ Node.js ๋ฒ„์ „์„ ์˜ฌ๋ ค์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

    • FROM node:20-alpine
      WORKDIR /app
      COPY package*.json ./
      RUN npm install --legacy-peer-deps
      COPY . .
      EXPOSE 3000
      CMD ["npm", "start"]

๋˜๋Š” 2. postinstall ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

  • package.json์—์„œ postinstall ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ npm ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ๊ฐ•์ œ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
  • "postinstall": "node -v && npm -v"

๊ฒฐ๋ก 

  1. xdg-open ์˜ค๋ฅ˜: Render์—์„œ BROWSER=none ์„ค์ •ํ•˜์—ฌ ํ•ด๊ฒฐ.
  2. Vite CJS API ๊ฒฝ๊ณ : package.json์—์„œ "type": "module" ์œผ๋กœ ๋ณ€๊ฒฝ.
  3. npm ๋ฒ„์ „ ์ถฉ๋Œ: Dockerfile์—์„œ Node.js ๋ฒ„์ „ 20 ์ด์ƒ์œผ๋กœ ์˜ฌ๋ ค ํ•ด๊ฒฐ.

์ด์ œ Vite ํ”„๋กœ์ ํŠธ๋ฅผ Render์— ์›ํ™œํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค!

@leekh8
Hello :)