"두 ubiquitous npm 패키지를 은퇴시키는 플래그 둘. 2026 인데 대부분 프로젝트가 아직 dotenv 와 nodemon 설치 — 템플릿이 몇 년째 그래서. 멈춰."
--env-file — dotenv 없는 dotenv
dotenv 패키지가 주간 30M+ 다운로드. 일은 .env 파일 읽고 그 내용을 process.env 에 넣는 거 전부. Node 20 이 내장 추가:
# .env
DATABASE_URL=postgres://localhost/mydb
LOG_LEVEL=debug
API_KEY=sk-something-secret
node --env-file=.env script.mjs
# inside script.mjs, process.env.DATABASE_URL is set
여러 --env-file 플래그가 stack — layered config 에 유용:
node --env-file=.env --env-file=.env.local server.mjs
# .env.local overrides .env where keys collide
포맷이 dotenv 관례 따라: 줄당 KEY=value, 주석엔 #, 공백엔 quoted value. 구현이 Node 코어의 얇은 파서; 아무것도 install 안 필요.
--watch — nodemon 없는 nodemon
nodemon 이 프로젝트 watch 하고 파일 변경 시 Node 재시작. Node 22 가 --watch 를 stable 로:
node --watch server.mjs
# Save server.mjs (or any imported module) → automatic restart
Entry 파일에서 모듈 그래프 walk 하고 모든 import 된 파일 watch. 깊은 유틸리티 편집, 서버 reload. Entry 파일 자체 저장, 같음. --watch-path=./config 로 그래프에 없는 디렉토리 (예: 런타임 로드 config) 도 watch.
결합된 Dev 루프
node --env-file=.env --watch --enable-source-maps server.mjs--env-file=.env— 환경 로드--watch— 파일 변경 시 재시작--enable-source-maps— 더 나은 stack trace (Node 22+ 가 많은 config 에서 기본 on)
"dev": "node --env-file=.env --watch server.mjs"..env.local, .env.production 은?
Frontend 프레임워크 (Next.js, Vite) 관례가 .env 파일 여러 개 순서로 로드: .env → .env.local → .env.production. Node 의 --env-file 은 이 layering 자동으로 안 함 — 근데 플래그 stack 가능:
# dev
node --env-file=.env --env-file=.env.local server.mjs
# prod (CI sets this command)
node --env-file=.env --env-file=.env.production server.mjs
Multi-environment setup 엔 NODE_ENV 기반 옳은 조합 픽하는 작은 wrapper 짜. 플래그 자체가 너 대신 정책 픽 안 함 — 그게 강점 (놀람 없음) 이고 한계 (네가 정책 씀).
--watch vs Hot Module Replacement
--watch 가 뭐 하는지 명확히: 변경 시 프로세스 재시작. Hot module replacement (HMR) 안 함 — "프로세스 도는 동안 이 모듈 export reload" 같은 정밀한 게 없음. Frontend dev 서버 (Vite) 엔 HMR 이 옳은 도구. Backend 서버엔 풀 재시작이 보통 원하는 거: 새 상태, stale subscription 없음, leak 된 listener 없음. Node 서버용 HMR 은 복잡성 가치 거의 없어.