ES module로 바꿨더니 __dirname이 없어졌다
ES module에는 CommonJS의 __dirname이 없다. 실행 폴더를 바꿔 같은 이름의 파일을 읽어 보고, 모듈 기준 URL·import.meta.dirname·fileURLToPath 중 지원 버전과 API에 맞는 경로를 고른다. 공백 경로에서 URL.pathname을 그대로 쓰면 실패하는 이유도 확인한다.
빌드노트
빌드·배포 카테고리의 글입니다.
총 49개의 글
ES module에는 CommonJS의 __dirname이 없다. 실행 폴더를 바꿔 같은 이름의 파일을 읽어 보고, 모듈 기준 URL·import.meta.dirname·fileURLToPath 중 지원 버전과 API에 맞는 경로를 고른다. 공백 경로에서 URL.pathname을 그대로 쓰면 실패하는 이유도 확인한다.
Maven의 optional 의존성은 제공 라이브러리에는 남아도 소비 앱에 자동 전달되지 않는다. 합성 라이브러리로 트리·컴파일 실패·실행 중 클래스 누락을 비교하고, 사용하는 기능의 의존성을 앱에 직접 선언하는 방법을 확인한다.
npm ci --omit=dev가 성공해도 빌드에 필요한 개발 도구는 빠질 수 있다. 같은 lock의 설치·파일·빌드 결과를 비교하고, 실제 설치 조건을 확인해 빌드용 의존성과 운영용 의존성을 나누는 방법을 설명한다.
소스에서 지운 텍스트 리소스가 target/classes와 JAR에 남는 조건을 별도 Maven 프로젝트로 확인했다. 소스·중간 출력·JAR을 비교하고 clean package 결과로 이전 복사본과 현재 빌드 입력을 구별한다.
node_modules에 파일이 있어도 exports가 공개하지 않은 하위 경로는 import할 수 없다. 같은 파일을 둔 로컬 패키지에서 오류를 비교하고, 공개 진입점을 쓰는 수정과 소유 패키지에 경로를 명시하는 수정을 구분한다.
Node exec의 ERR_CHILD_PROCESS_STDIO_MAXBUFFER를 CLI의 종료 코드와 구별한다. stdout·stderr의 작은 한도와 충분한 한도, spawn 스트림 소비를 실제 비교하고 버퍼 크기를 정하거나 로그 처리 방식을 바꾸는 기준을 설명한다.
Node 내장 --env-file은 이미 주어진 환경값을 덮지 않는다. 키 존재 확인에서 시작 설정의 수정 위치로 이어 가고, 같은 합성 키와 두 파일의 순서를 바꾼 새 프로세스의 실제 값으로 판단한다.
Node ESM의 정적 의존 모듈은 엔트리 본문의 환경값 대입보다 먼저 평가될 수 있다. 같은 두 파일을 새 프로세스에서 비교해 읽는 시점을 확인하고, 시작 환경 주입과 초기화 뒤 동적 import 중 적용할 방법을 고른다.
로컬에 있는 템플릿이 npm tarball에서 빠졌는지 pack 목록과 실제 tar 항목으로 확인한다. files와 해당 위치의 .npmignore를 고친 뒤 별도 소비자에서 설치와 자원 읽기를 구분해 검사한다.
npm 설치가 종료 코드 0이어도 ignore-scripts 때문에 postinstall 생성물이 빠질 수 있다. 실제 CI 명령과 scripts·설정을 확인하고, 검토한 생성 작업을 명시 실행할 때 생략되는 pre/post hook과 의존 패키지의 경계를 살핀다.
package.json만 바꾼 입력에서 npm install은 lock을 갱신하며 성공했지만 npm ci는 실패했다. 실제 오류의 두 버전과 lock diff로 누락을 확인하고, 기존 lock 갱신과 npm 옵션 대조 중 필요한 조치를 고른다.
NODE_PATH에만 둔 패키지는 CommonJS require로 읽혀도 ESM import로는 찾지 못한다. 실제 해석 위치를 조회하고 같은 로컬 패키지를 node_modules에 놓은 대조로 배치 문제를 구별한다.