node --check app.cjs는 대상 스크립트를 실행하지 않고 문법을 검사합니다. 검사 통과가 실행 성공을 뜻하지는 않습니다. 아래 실험에서는 미정의 변수, 누락된 모듈, 의존 파일의 문법 오류가 모두 검사를 통과했지만 실행할 때 실패했습니다. 옵션의 공식 설명은 Node.js CLI 문서에서 확인할 수 있습니다.
기준일은 2026-09-27입니다. 결과는 엔진이 Node.js v22.22.3·Linux·CommonJS .cjs 환경에서 수행한 통제 실험 기록이며, 개인 사용 경험이 아닙니다.
빠른 문법 검사
검사할 app.cjs가 있는 디렉터리에서 다음 명령을 실행합니다.
node --check app.cjs
공식 문서는 -c와 --check를 같은 문법 검사 옵션으로 설명합니다. 공식 옵션 설명
제공된 실험에서 검사에 통과한 세 사례는 종료 코드가 0이었고 표준 출력과 표준 오류가 모두 비어 있었습니다. 대상 파일 자체에 문법 오류가 있던 사례는 종료 코드 1과 SyntaxError를 기록했습니다.
검사 결과를 해석할 때는 출력 유무뿐 아니라 검사 명령의 종료 코드를 확인해야 합니다. 검사 통과 뒤의 실행 결과는 별도로 구분합니다.
네 가지 사례로 검사와 실행 비교
각 사례는 서로 다른 디렉터리에 준비합니다. 파일 내용과 존재 조건을 아래와 같이 맞춘 뒤, 각 디렉터리에서 두 명령을 각각 실행해 비교합니다.
node --check app.cjs
node app.cjs
첫 번째는 문법 검사이고, 두 번째는 실제 실행입니다. 아래 결과는 제공된 엔진 실험에 기록된 값입니다.
1. 대상 파일에 문법 오류가 있는 경우
app.cjs에 다음 내용을 넣습니다.
const value = ;
검사와 실행 모두 종료 코드 1로 실패했습니다. 두 명령에서 기록된 오류는 SyntaxError: Unexpected token ';'입니다.
이 사례에서는 대상 파일 자체의 문법 오류가 검사 단계에서 드러났습니다.
2. 정의하지 않은 변수를 사용하는 경우
app.cjs에 다음 내용을 넣습니다.
console.log(missingValue);
검사는 종료 코드 0으로 통과했습니다. 실행은 종료 코드 1로 실패했고, ReferenceError: missingValue is not defined가 기록됐습니다.
이 사례의 검사 통과는 missingValue를 실행 시 사용할 수 있다는 확인이 아니었습니다.
3. 존재하지 않는 모듈을 불러오는 경우
app.cjs에 다음 내용을 넣습니다. 같은 디렉터리에 does-not-exist.cjs가 없어야 합니다.
require('./does-not-exist.cjs');
검사는 종료 코드 0으로 통과했습니다. 실행은 종료 코드 1로 실패했고, Cannot find module './does-not-exist.cjs' 메시지와 오류 코드 MODULE_NOT_FOUND가 기록됐습니다.
이 사례에서는 불러올 파일이 없어도 진입 파일의 문법 검사는 통과했습니다.
4. 의존 파일에 문법 오류가 있는 경우
같은 디렉터리에 파일 두 개를 준비합니다.
app.cjs:
require('./broken.cjs');
broken.cjs:
const value = ;
node --check app.cjs는 종료 코드 0으로 통과했습니다. node app.cjs는 broken.cjs의 SyntaxError: Unexpected token ';'를 기록하고 종료 코드 1로 실패했습니다.
첫 번째 사례와 같은 문법 오류를 의존 파일에 두자, 이번 진입 파일 검사에서는 드러나지 않았습니다. app.cjs의 검사 통과를 의존 파일 전체의 문법 검사 완료로 해석할 수 없습니다.
결과와 완료 기준
다음은 네 가지 통제 실험의 결과입니다. 공식 문서에 수록된 예제가 아니라, 2026-09-27에 엔진이 실행한 기록을 정리했습니다.
| 사례 | 문법 검사 종료 코드 | 실행 종료 코드 | 실행 시 오류 |
|---|---|---|---|
| 대상 파일의 문법 오류 | 1 | 1 | SyntaxError |
| 미정의 변수 | 0 | 1 | ReferenceError |
| 누락된 의존 모듈 | 0 | 1 | MODULE_NOT_FOUND |
| 의존 파일의 문법 오류 | 0 | 1 | SyntaxError |
모든 사례에서 표준 출력은 비어 있었습니다. 검사를 통과한 세 사례는 검사 단계의 표준 오류도 비어 있었지만, 실제 실행에서는 모두 실패했습니다.
이 예제의 완료 여부는 다음처럼 구분합니다.
- 문법 검사 결과:
node --check app.cjs의 종료 코드와 오류를 확인합니다. 이번 실험에서는 첫 번째 사례만 검사 단계에서 실패했습니다. - 실행 결과:
node app.cjs의 종료 코드와 오류를 별도로 확인합니다. 네 사례 모두 의도적으로 실행 오류를 재현하며, 종료 코드1이 기록됐습니다. - 결과 기록: 검사 통과만으로 변수 참조, 의존 파일의 존재, 의존 파일의 문법까지 검증됐다고 기록하지 않습니다. 이번 실험에서 이 세 항목은 실행 실패로 드러났습니다.
확인하지 않은 범위
결과의 적용 범위는 **Node.js v22.22.3·Linux·CommonJS .cjs**입니다. 다른 Node.js 버전, 운영체제, ESM, TypeScript에서의 동작은 미확인입니다. 린트나 타입 검사 도구와의 비교 실험도 수행하지 않았습니다.
--require 또는 환경 설정으로 사전 로딩되는 코드의 실행 여부와 부작용은 이번 실험에서 확인하지 않았습니다. 이 글은 해당 동작을 보장하지 않습니다.
이 글의 독자적 가치는 공식 옵션 설명에 네 가지 통제 실험을 더해, 같은 문법 검사 통과 뒤에도 서로 다른 실행 실패가 발생했다는 점을 파일 내용과 종료 코드로 대조한 데 있습니다.