패키지는 일반 토파즈 모듈에 루트, 진입점, 의존성 그래프와 빌드 대상을 부여합니다. 새 문법을 추가하거나 모듈 가시성·순환 규칙을 느슨하게 만들지 않습니다.
1. 패키지 루트 만들기
topaz init --root my-app
루트에는 topaz.toml과 src/main.tpz가 생깁니다. 매니페스트는 패키지 이름,
현재 언어, 진입점, 기본 빌드 대상과 의존성을 선언합니다. 진입 파일 없이
--root my-app을 전달한 명령은 이 매니페스트의 진입점을 사용합니다.
Web 애플리케이션과 HTTP 스캐폴드는 생성할 때 선택합니다.
topaz init --target web-app --root my-web-app
topaz init --target http-service --root my-service
2. 레지스트리 의존성이 없는 패키지 잠그기
topaz lock --root my-app
topaz fmt --check --root my-app
topaz check --root my-app --locked
topaz test --root my-app --locked
topaz run --root my-app --locked
topaz.lock은 루트 매니페스트와 해석된 로컬 의존성 내용을 기록합니다.
--locked는 매니페스트, 잠금 파일이나 로컬 바이트가 다르면 진행하지 않습니다.
의도적으로 매니페스트를 바꾸고 lock을 다시 실행해 차이를 검토한 뒤
--locked를 복원하세요.
3. 로컬 또는 레지스트리 의존성 추가하기
경로 의존성은 상대 경로와 내용 식별자를 함께 추가합니다.
topaz add utility --path ../utility --root my-app
topaz lock --root my-app
레지스트리 의존성은 잠그기 전에 명시적인 로컬 레지스트리 입력에 있어야 합니다.
topaz add utility@1.2.0 --root my-app
topaz vendor --root my-app --from ./registry
topaz check --root my-app --locked
vendor는 선택한 패키지를 검증해 vendor/utility/1.2.0으로 복사하고 잠금
파일을 씁니다. 레지스트리 패키지의 해시나 벤더링한 내용이 없는데 lock을 먼저
실행하면 네트워크 레지스트리에 접속하지 않고 실패합니다. fetch도 같은
명시적인 로컬 --from 경계를 사용하며 두 명령 모두 주변 네트워크에서
의존성을 찾지 않습니다.
4. 로컬 입력만으로 빌드하기
topaz build --root my-app --locked --release --out-dir product
이제 패키지 해석은 루트, 경로 의존성, 잠긴 벤더 바이트와 도구 모음의 번들 입력만 사용합니다. 네이티브와 Web 컴파일도 내부적으로 잠긴 Cargo 오프라인 모드를 사용하므로 추가 토파즈 옵션은 필요하지 않습니다.
완성된 관리형 제품이 배포 단위입니다. 실행할 때 topaz.toml,
topaz.lock, vendor, 패키지 소스나 토파즈 CLI는 필요하지 않습니다. 제품
디렉터리 전체와 선언한 파일 시스템 권한이 요구하는 애플리케이션 데이터를
복사하세요.
잠금을 약화하지 않고 복구하기
--locked가 매니페스트 차이를 알리면 변경이 의도적인지 판단하고 잠금 파일을 다시 만든 뒤 검토합니다.- 레지스트리 패키지가 없으면 명시적인 로컬 레지스트리 입력을 확보해
vendor또는fetch를 실행합니다.--locked를 제거하지 마세요. - 벤더 바이트가 달라졌다면 기록된 내용을 복원하거나 의도적으로 다시 벤더링하고 새 의존성을 검토합니다.
- 빌드 출력이 달라졌다면 알 수 없는 파일을 지우지 말고 새 빈 출력 디렉터리를 사용합니다.