패키지는 일반 토파즈 모듈에 루트, 진입점, 의존성 그래프, 빌드 대상을 더해 줍니다. 새 문법을 추가하지는 않으며 모듈 가시성 규칙과 순환 규칙도 그대로 유지합니다.
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를 제거하지 마세요. - 벤더 바이트가 달라졌다면 기록된 내용을 되돌립니다. 아니면 의도적으로 다시 벤더링하고 새 의존성을 검토합니다.
- 빌드 출력이 달라졌다면 알 수 없는 파일을 지우지 말고 새 빈 출력 디렉터리를 사용합니다.