CLI
모든 명령이 --json과 --yes를 받는다. 이 표에서 합쳐 적은 하위 명령까지 전부 보려면 naro help.
명령
| 명령 | 하는 일 |
|---|---|
naro login | GitHub으로 로그인한다. 브라우저를 연다. |
naro logout | 저장된 세션을 지운다. |
naro whoami | 지금 로그인한 계정을 보여준다. |
naro token | CI용 액세스 토큰을 찍는다. NARO_TOKEN으로 쓴다. |
naro link | 이 디렉터리를 프로젝트에 연결하고 .naro/project.json을 쓴다. |
naro unlink | 연결을 지운다. |
naro projects [--team <slug>] | 프로젝트를 나열한다. 팀으로 좁힐 수 있다. |
naro project inspect | 연결된 프로젝트를 보여준다. |
naro deploy [--prod] [--root <dir>] | 로컬에서 빌드해 배포한다. --prod가 없으면 프리뷰. 모노레포에서는 --root로 앱 위치를 가리킨다. |
naro deployments | 연결된 프로젝트의 배포를 나열한다. |
naro inspect <deployment-id> | 배포 하나를 빌드 로그와 함께 보여준다. |
naro cancel <deployment-id> | 아직 도는 빌드를 멈춘다. |
naro git connect | disconnect | 저장소를 연결하거나 끊는다. 연결하면 푸시할 때마다 배포된다. |
naro logs [deployment-id] [--type build|runtime] | 런타임 로그. --type build를 붙이면 그 배포의 빌드 로그. |
naro analytics [--range <r>] [--path <p>] [--referrer <host>] [--country <cc>] [--device <d>] [--browser <b>] [--os <o>] | 실제 방문의 웹 애널리틱스. 기간(--range, 기본 7d)의 방문자와 페이지 뷰를 보여 주고, 이어서 페이지 뷰가 많은 페이지·유입 경로·국가·기기·브라우저·운영체제를 보여 준다. --path, --referrer, --country, --device, --browser, --os로 차원마다 값 하나씩 좁히고, 여럿을 주면 모두 맞는 방문만 센다. --json은 추이까지 리포트 전체를 출력한다. |
naro insights [--metric <m>] [--range <r>] [--env <e>] [--route <pattern>] [--path <p>] [--country <cc>] [--device <d>] [--browser <b>] [--os <o>] | enable | disable | 실제 방문의 Speed Insights. 지표마다 p75와 좋음·개선 필요·나쁨 비율을 보여 주고, 고른 지표(--metric, --range)를 페이지·기기·느린 방문의 원인 요소·배포별로 보여 준다. 기본은 프로덕션이고 --env preview는 프리뷰 워커를 읽는다. --route는 라우트 하나의 경로를 펼친다. enable·disable로 두 환경의 측정을 함께 켜고 끈다. --path, --country, --device, --browser, --os로 차원마다 값 하나씩 좁힐 수 있고(Speed Insights에는 유입 경로가 없어 --referrer는 거절한다), 지표 아래 한 줄이 페이지를 불러오는 데 걸린 시간의 p75와 단계별 평균을 보여 준다. |
naro protection [--project <id>] | enable | disable | bypass [remove] | 프리뷰 보호를 보거나 바꾼다. 켜면 이 프로젝트 멤버만 프리뷰 URL을 열 수 있고, 끄면 링크를 아는 누구나 열 수 있다. enable·disable로 바꾸면 에지는 1분쯤 뒤에 반영한다. bypass는 CI나 모니터링이 x-naro-protection-bypass 헤더로 보내는 우회 비밀값을 만들고(한 번만 보이고, 이전 값은 대체된다) bypass remove는 그것을 지운다. |
naro env list | add | remove | pull | 환경 변수를 나열·추가·삭제하거나 내려받는다. |
naro domains list | add <host> | remove <host> | verify [host] | 커스텀 도메인을 나열·추가·삭제한다. verify는 DNS를 다시 확인하고 빠진 것을 찍는다. 프로젝트당 커스텀 도메인은 20개까지이고(apex를 www와 함께 추가하면 2개), 프로젝트를 서비스하는 도메인 이름은 합쳐서 4,800바이트까지다. |
naro db enable | info | query <sql> | push | dump | restore | pull | reset [--yes] | lint | table <action> | index <action> | 프로젝트 데이터베이스를 만들고, 상태와 한도를 보고, SQL을 실행하고, SQL 없이 테이블과 인덱스를 만들고 바꾸고, 밀린 마이그레이션을 적용한다. 파일로 덤프하고, 이전 시점으로 복원하고, 스키마를 첫 마이그레이션으로 가져오고, 정책까지 마이그레이션 파일이 말하는 상태로 되돌리고, D1에서 실제로 물리는 것과 Data API가 적용하지 못하는 정책을 점검하기도 한다. |
naro migration new <name> | list | up | repair <name> [--status <s>] [--yes] | 번호가 붙은 마이그레이션 파일을 만들고, 로컬 파일과 적용된 것을 비교하고, 밀린 것을 적용하고, 원장이 데이터베이스와 어긋났을 때 원장을 고친다. |
naro gen types [--lang typescript] [--output <file>] | 데이터베이스 스키마의 TypeScript 타입을 찍는다: 테이블마다 Row 인터페이스와, naro-js의 createClient<Database>()가 받는 Database 타입. --lang은 TypeScript뿐이다. |
naro backend [status] | enable | disable | keys [--reveal] | keys rotate --anon|--service | 프로젝트 백엔드가 켜졌는지와 상태·URL·anon 키를 보여주고, 백엔드를 켜고(provision도 같은 명령) 끄고, --reveal로 service 키를 찍고, 키를 바꾼다. |
naro backend auth [email set|remove] [oauth set|remove <google|github>] [redirects list|add|remove <url>] [require-verification <on|off>] [signups <on|off>] [password --min-length <n>] | 로그인 설정을 보거나 바꾼다: 누구나 가입할 수 있는지(signups off면 직접 만든 계정만 남는다), 새 비밀번호의 최소 글자 수, 인증·재설정 메일을 보낼 Resend 계정, Google·GitHub 앱, 로그인이 브라우저를 돌려보낼 수 있는 출처, 메일 인증 전 로그인을 막을지. 이메일·비밀번호 로그인은 아무것도 설정하지 않아도 된다. 비밀은 명령줄이 아니라 stdin(--api-key-stdin, --client-secret-stdin)으로만 받는다. |
naro backend users [create --username <name> --password-stdin] [delete <id|username|email>] | Supabase의 auth.admin처럼 프로젝트 사용자를 나열·생성·삭제한다. create는 아이디·이메일 중 하나 이상과 비밀번호(--password-stdin)를 받고, 계정은 인증된 상태로 만들어져 가입이 닫혀 있어도 바로 로그인된다. delete는 id·아이디·이메일을 받고 먼저 묻는다. |
naro policy list [--table <t>] | create "<CREATE POLICY …>" [--allow-unindexed] | drop <name> --table <t> | set <table> [--select <rule>] [--owner <column>] [--select-when <filter>] [--from-file <policy.json>] | remove <table> | Postgres·Supabase와 같은 Data API의 행 수준 보안: 정책을 CREATE POLICY로 나열하고, CREATE POLICY 문으로 만들고(--file에는 여러 문장과 DROP POLICY도 된다), 이름으로 지운다. set은 규칙(none, public, authenticated, owner)이나 auth.uid()를 쓰는 필터 문법의 조건으로 naro_select … naro_delete를 쓰는 줄임말이고, remove는 테이블의 정책을 전부 지운다. 정책이 없는 테이블은 anon과 로그인 사용자의 요청을 전부 거부한다. 테이블의 정책은 그 테이블의 마이그레이션에 써서 테이블과 함께 두는 편이 좋다. 이 명령들은 데이터베이스를 바로 바꾼다. |
naro storage [status] | enable | bucket <action> [name] | ls [naro://<bucket>[/<prefix>]] | cp <from> <to> | rm <naro://bucket/path> | Naro Storage: 켜고, 한도와 저장된 양을 보고, 버킷을 만들고·고치고·비우고·지우며, 프로젝트의 service 키로 naro://<bucket>/<path>의 파일을 나열·복사·삭제한다. |
naro promote <deployment-id> | 이미 있는 빌드를 다시 빌드하지 않고 프로덕션에 올린다. |
naro rollback [deployment-id] | 프로덕션을 이전 빌드로 되돌린다. |
전역 옵션
| 명령 | 하는 일 |
|---|---|
--json | 표준출력에 기계가 읽는 JSON 객체 하나. |
--yes, -y | 절대 묻지 않는다. CI와 에이전트용. |
--token <t> | 액세스 토큰. NARO_TOKEN으로 줘도 된다. |
--project <id> | 대상 프로젝트를 지정해 .naro/project.json을 무시한다. |
--root <dir> | 저장소 안의 앱 디렉터리. 모노레포용. |
--name <name> | 첫 배포에서 쓸 프로젝트 이름. |
--team <slug> | 나열과 연결에 쓸 팀 범위. |
--prod | 프로덕션을 대상으로 한다. |
--debug | 자세한 진단 출력. |
JSON 출력
--json은 표준출력에 JSON 객체를 정확히 하나만 찍고 로그는 표준에러로 보낸다. 부르는 쪽이 걸러내지 않고 표준출력을 그대로 파싱할 수 있다.
에러코드
실패는 success: false와 함께 코드와 메시지를 돌려준다. 코드는 안정적이다 — 메시지가 아니라 코드로 분기한다.
| 코드 | 하는 일 |
|---|---|
NOT_LOGGED_IN | 세션이 없다. naro login을 돌리거나 토큰을 넘긴다. |
PROJECT_NOT_LINKED | 이 디렉터리에 링크 파일이 없다. naro link를 돌리거나 한 번 배포한다. |
FRAMEWORK_UNSUPPORTED | naro가 빌드할 수 있는 프레임워크로 판정하지 못했다. |
BUILD_FAILED | 프레임워크 빌드가 실패했다. 빌드 로그를 읽고 고쳐서 다시 배포한다. |
DEPLOYMENT_NOT_FOUND | 그 id의 배포가 이 프로젝트에 없다. |
DEPLOYMENT_NOT_PROMOTABLE | 아티팩트가 남아 있는 READY 배포만 올릴 수 있다. |
UNAUTHORIZED | 세션이나 토큰에 이 프로젝트를 다룰 권한이 없다. |
RATE_LIMITED | 요청이 너무 잦다. 기다렸다 다시 시도한다. |