我在寫應用程序並導入一些包B
。該軟件包有vendor
目錄,其中又包含軟件包C
。我也想直接在我的應用中使用該包C
。如何在Go包中處理嵌套的「供應商」目錄?
所以我決定使用glide
包管理器。它將B
和C
下載到myapp/vendor
目錄中,但保留myapp/vendor/B/vendor/C
。因此,當我構建我的應用程序時,它會使用兩個不同版本的C構建(也適用於myapp/vendor/C
)。
如何避免這種情況?
1)是否有包管理器來處理? govend
似乎與它的--prune
論點,但它不尊重這些C
包的版本。
2)或者,如何使glide
正確處理嵌套的vendor
目錄?
編輯
我的例子是https://github.com/orloffm/flat
。它使用cat
和 - 間接 - toy
包。 cat
有一些舊版本toy
已售賣並已提交到存儲庫。我做glide create && glide install
以及與此結束:
.
├── flat.go
├── glide.lock
├── glide.yaml
└── vendor
└── github.com
└── orloffm
├── cat
│ ├── cat.go
│ ├── vendor
│ │ └── github.com
│ │ └── orloffm
│ │ └── toy
│ │ └── toy.go
│ └── vendor.yml
└── toy
└── toy.go
我不想嵌套vendor
目錄與toy
。
我現在不使用'glide',但是你確定你有最新版本嗎?快速瀏覽一下文檔顯示''因爲這個Glide將依賴關係樹平化爲一個頂級供應商/目錄。「# – JimB
正如JimB所說,我使用的大多數當前的銷售工具都會自動將依賴關係樹展平。這實際上是必需的,因爲從兩個不同的唯一路徑導入的相同包實際上被視爲兩個不同的唯一包,就像您發現的那樣。我知道'govendor'默認是這樣做的。 – Kaedys
@Kaedys +1爲govendor。我已經在很多項目中使用過它。 – tier1