본문 바로가기
C.W.K.
Stream
Lesson 02 of 04 · published

경로 패키지는 발행된 패키지가 아니야

~13 min · packaging, distribution, swift, trade-offs

Level 0흩어진 부품
0 XP0/41 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

반대 상품 둘을 덮는 단어

앞 트랙은 패키지를 거절했어. 이 트랙은 하나를 받아. 그 두 문장이 단어를 같은 뜻으로 쓰면, 트랙 하나가 거짓말하는 거야.

같은 뜻이 아니야. 발행된 패키지는 네가 통제 못 하는 소비자한테 파는 상품이야. 레지스트리에 살고, 버전이 있고, 설치 때 받아오고, 소비자 둘이 다른 버전을 고정하는 게 지원되는 상태야. 그게 격리 상품이야. 가족이 모든 언어에서 거절한 그거고, 지금도 거절하는 그거야.

경로 패키지는 컴파일러 지시야. 내 옆 이 디렉터리를 컴파일 단위로 보라는 뜻. 버전 없어. 발행 단계 없어. 레지스트리 계정 없어. 디렉터리는 가족이 이미 사는 형제 작업 트리야. 해석 비용은 복사본 깔 때랑 같아. 소비자가 이미 가진 매니페스트에 줄 하나. 유지비는 없어.

여기선 격리가 뭘 더했을까

발행 패키지가 물리는 값을 이 가족에 대보면, 여전히 값이지 기능이 아냐. 스위프트 변경마다 발행 단계. 따지고 올려야 하는 버전 번호. 그리고 이제 정당해진 가능성 — 폰 앱 둘이 공용 타입의 다른 리비전을 컴파일하는 것. 마지막이 첫 기록이 짚은 바로 그 날카로운 모서리야. 지원되는 기능이 된 어긋남. 어긋남을 버그로 만들려고 있는 저장소 안에서.

경로 의존은 그 어긋남을 적어 넣을 자리가 없어. 태그가 아니라 트리를 가리키거든. 내일 체크아웃이든 오늘 체크아웃이든 같은 패키지를 봐. 같은 디렉터리니까. 가족이 참고 견디는 한계가 아냐. 사려던 성질이야.

한 단어가 상품 둘을 숨기게 두지 마. "패키지 시작했다"는 뒤집기 레슨이 경고한 정체성 부패를, 어휘 충돌에 적용한 거야. 받은 상품이 뭔지 한 문장으로 못 말하면 — 시간과 공간을 넘는 격리인지, 버전 없는 컴파일 단위인지 — 결정을 한 게 아냐. 옛 결정에 딱지 갈은 거지.

그래도 완결이야

앞 트랙의 척추 원칙이 한순간은 원칙을 꺾은 것처럼 보였어. 소비자가 이제 패키지를 적어. 목록을 읽어. 패키지는 이미 그 기계에 있는 형제 디렉터리의 상대 경로야. 소비자만 따로 받아오면 스위프트 반은 여전히 빌드가 안 돼. 그건 원래 그랬어. 키트 저장소는 이미 형제였고, 없을 때 어긋남 검사는 그냥 건너뛰었거든. 경로 패키지는 네트워크를 안 더했어. 가족 배치가 이미 전제하던 디렉터리에 이름을 붙인 거야.

척추를 부러뜨리는 건 레지스트리야. 태그. 바이트를 나중에 받아올 수 있다는 약속. 그중 아무것도 안 왔어. 다음 레슨은 컴파일러가 왜 단위가 필요했는지고, 이 레슨은 그걸 잘못 부르지 말라는 거뿐이야.

Code

경로 의존은 디렉터리지, 버전이 아니야·swift
// 소비자 패키지 매니페스트. 버전 없음. 레지스트리 없음.
// 경로는 상대야. 이 가족의 저장소는 이미 서로 형제로 살거든.
.package(path: "../the-kit/CwkKit")

// 그다음 타깃마다, 필요한 상품만 집어. 웹뷰를 안 띄우는 폰이
// 경로 울타리 하나 얻자고 웹 상품을 링크하면 안 돼 —
// 소속 시험을 링크에 적용한 거야.
.product(name: "CwkKitCore", package: "CwkKit")

// 대조 — 거절한 상품. 같은 단어, 반대 물건. 주석을 풀면
// 이 가족에 대한 거짓말이 돼.
//
// .package(url: "https://example.invalid/the-kit.git", from: "1.0.0")
//
// 그 줄은 격리를 사. 고정, 받아오기, 소비자 A 는 1.2 이고
// B 는 1.4 인 날. 경로 줄은 그걸 말을 못 해. 말 못 하는 게 기능이야.

External links

Exercise

아는 코드베이스에서 의존을 '패키지'라고 부르는 자리를 전부 찾아. 목록을 둘로 갈라. 격리 상품 (레지스트리, 버전, 고정, 받아오기) 이랑 컴파일 단위 (경로, 워크스페이스, 모노레포 멤버). 애매한 줄이 있으면 가르는 문장을 써. 그 줄이 진짜로 둘 중 어느 상품인지.
Hint
보통 표지는 버전의 유무야. 버전이 있으면 격리를 판 거야. 경로면 컴파일러가 단위가 필요했고, 격리를 팔 생각은 없었어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.