我目前正在試驗 Satis。我希望能夠在某個地方獲取我的私有包的確切版本,因此通常在composer.lock中的所有內容。我總是通過 Git 提交composer.lock。但如果我理解正確的話,Satis 在其packages.json 中總是只包含必需的部分,即我的composer.json 中的部分,因此當然只包含版本范圍。有沒有辦法配置 Satis,以便也存儲composer.locks 或者如何獲取包的準確“快照”?+++ 示例 +++好吧,我試著解釋一下。假設我有一個包 my/package. 這里我添加了幾個文件,包括一個composer.json,其中我定義symfony/console應該安裝在大于或等于4的版本中?,F在我執行“composer install”,Symfony安裝在4.4版本中。我提交了所有文件,包括composer.lock 并創建了1.0 版本。現在我要去薩蒂斯。這里我將 my/package 和 my/package 對應的存儲庫 URL 添加到 satis.json 并更新它。Satis 正確檢查了我的包,并在 packages.json 或更準確地說 all*.json 中列出了我的包,版本為 1.0。到目前為止一切都很好。但是,如果我現在查看 Satis 在 all*.json 中為我的包存儲的元數據,我實際上在這里看到了我指定的要求,即 symfony/console 應該安裝在大于或等于 4 的版本中。所以 Satis拍攝composer.json的快照,顯然忽略了composer.lock。所以我沒有機會看到我的版本 1.0 與 Symfony 的確切版本 4.4 一起工作,而例如版本 1.1 與 symfony/console 4.5 一起工作。但這個信息對我來說很有趣。
2 回答

白豬掌柜的
TA貢獻1893條經驗 獲得超10個贊
安裝軟件包時,Composer 會即時重新計算所有依賴項。這基于composer.json
您的應用程序和composer.json
所有依賴項的文件。
Acomposer.lock
不應該是任何包的一部分,并且安裝包時不會考慮它。

蝴蝶不菲
TA貢獻1810條經驗 獲得超4個贊
所以,我現在建立了一個解決方法。整個事情并不十分完美,因為大型存儲庫的運行時間相對較長,這就是為什么我必須每天將其作為 cron 運行一次。但效果很好。
我創建了一個新的 Satis 控制臺命令。
此命令使用 PackageSelection 類來確定所有現有包。
我遍歷包列表并查找 dist 文件的路徑和名稱。
我將 ZIP 文件解壓到內存中并查找composer.lock。如果有,我會解析它并讀取依賴包的確切版本號。
我將信息匯總在一個單獨的 JSON 文件中,并將其與 htdocs 下的packages.json 并行存儲。從那里我可以調用它并將其集成到我自己的應用程序中或進一步處理它。
- 2 回答
- 0 關注
- 137 瀏覽
添加回答
舉報
0/150
提交
取消