使用Composer創建公共類庫

概述

如果多個項目中存在使用相同類庫、模塊的情況,此時可以考慮將類庫或者模塊單獨抽取出來,形成獨立類庫,通過composer
來進行依賴管理,這樣可以更方便維護,大大提升開發效率。

優勢

  • 可以對特定模塊進行統一維護和升級
  • 特定的類庫可由專人進行維護,保證穩定性和可靠性
  • 避免了重復開發的情況

步驟

本地開發

為了方便調試,可先在本地現有項目中開發類庫,等到開發完成后,再將相關代碼單獨抽取出來。

  • 首先在項目中創建一個存放類庫的目錄,如packages/zacksleo/my-libs,

其中packages是類庫總目錄, zacksleo是用戶名,相當于命名空間的第一級,my-libs是類庫存放目錄。

  • 在目錄中創建composer.json 文件,并添加形如以下的內容:
{"name": "zacksleo/my-libs","description": "my libs","type": "library","license": "MIT","authors": [{"name": "zacksleo","email": "zacksleo@gmail.com"}],"minimum-stability": "stable","autoload": {"psr-4": {"zacksleo\\my\\libs\\": "src"}}
}

其中,name是類庫名稱,descrption是詳細說明,type是類別,license是使用的協議,authers是作者信息,

minimum-stability 用來聲明最小依賴,通常有devstable可選,autoload中的psr-4聲明了

命名空間和對應的目錄,注意命名空間就當使用雙反斜杠,目錄使用相對路徑,此外聲明了目錄為`src``目錄

  • src目錄中添加相關代碼,其中的類使用命名空間zacksleo\\my\\libs

  • 在項目的composer.json中,通過path方式引入本地類庫,如可在repositories中添加如下信息:

  "repositories": {"my-libs": {"type": "path","url": "packages/zacksleo/my-libs"}}

其中my-libs是別名,可任意填寫,type設置成path, url為類庫所在的相對路徑(與composer.json文件相對)

  • 通過composer require命令或者在composer.json中的require部分添加聲音,來實現依賴加載,如

composer require zacksleo/my-libs

在Github上創建庫并上傳代碼

當在本地開發完成后,可將類庫獨立抽取出來(此處的my-libs目錄下的內容),并提交到Github上新建的倉庫中

配置packagist并發布

  1. 先在packagist.org中注冊好賬號,以便發布包。
  2. 在Github的倉庫中,點擊settings,找到 Intergrations & services, 點擊Add servies, 選擇Packagist,

填寫在packagist.org注冊的用戶名和Token(在Profile中找到Your API Token)

點擊確定添加,這樣,每次Github的變動,都會自動更新到packagist上,免去了手動更新的麻煩

本地依賴改成線上版本, 并清除開發代碼

類庫一經發布到packagist上后,就可將本地項目composer.json添加的repositories移除,重新運行composer install

來安裝packagist上的版本,同時packages 目錄亦可刪除。

版本問題說明

composer使用語義化的版本進行依賴管理,因此類庫在更新和發布時,所標記的版本號,也就當遵循語義化的版本規范。

基主要有以下幾個內容:

版本格式:主版本號.次版本號.修訂號,版本號遞增規則如下:

  1. 主版本號:當你做了不兼容的 API 修改,
  2. 次版本號:當你做了向下兼容的功能性新增,
  3. 修訂號:當你做了向下兼容的問題修正。
  4. 先行版本號及版本編譯信息可以加到“主版本號.次版本號.修訂號”的后面,作為延伸。

參考資料

  • Composer中文文檔
  • 語義化的版本規范

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83694.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83694.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83694.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu中TFTP服務器安裝使用

TFTP服務器 在 Ubuntu 下使用 TFTP(Trivial File Transfer Protocol) 服務,通常用于簡單的文件傳輸(如網絡設備固件更新、嵌入式開發等)。 1 TFTP服務器安裝 sudo apt-get install tftp-hpa sudo apt-get install…

前端面試總結

1.請做下自我介紹 技術棧 工作經歷 2.挑一個項目詳細講一下 介紹了一個項目的業務,重點講了一個動態表單的實現,從業務、擴展性、可維護性、性能提升 3.場景題:問答怎么做,表單之間關聯,回答不同問題跳轉到不同的下一個…

Python訓練打卡Day38

Dataset和Dataloader類 知識點回顧: Dataset類的__getitem__和__len__方法(本質是python的特殊方法)Dataloader類minist手寫數據集的了解 在遇到大規模數據集時,顯存常常無法一次性存儲所有數據,所以需要使用分批訓練的…

web3-區塊鏈基礎:從區塊添加機制到哈希加密與默克爾樹結構

區塊鏈基礎:從區塊添加機制到哈希加密與默克爾樹結構 什么是區塊鏈 抽象的回答: 區塊鏈提供了一種讓多個參與方在沒有一個唯一可信方的情況下達成合作 若有可信第三方 > 不需要區塊鏈 [金融系統中常常沒有可信的參與方] 像股票市場,或者一個國家的…

MySQL 索引:為使用 B+樹作為索引數據結構,而非 B樹、哈希表或二叉樹?

在數據庫的世界里,性能是永恒的追求。而索引,作為提升查詢速度的利器,其底層數據結構的選擇至關重要。如果你深入了解過 MySQL(尤其是其主流存儲引擎 InnoDB),你會發現它不約而同地選擇了 B樹 作為索引的主…

Kafka broker 寫消息的過程

Producer → Kafka Broker → Replication → Consumer|Partition chosen (by key or round-robin)|Message appended to end of log (commit log)上面的流程是kafka 寫操作的大體流程。 kafka 不會特意保留message 在內存中,而是直接寫入了disk。 那么消費的時候&…

leetcode hot100(兩數之和、字母異位詞分組、最長連續序列)

兩數之和 題目鏈接 參考鏈接&#xff1a; 題目描述&#xff1a; 暴力法 雙重循環查找目標值 class Solution {public int[] twoSum(int[] nums, int target) {int[] res new int[2];for(int i 0 ; i < nums.length ; i){boolean isFind false;for(int j i 1 ; j …

SkyWalking架構深度解析:分布式系統監控的利器

一、SkyWalking概述 SkyWalking是一款開源的APM(應用性能監控)系統&#xff0c;專門為微服務、云原生和容器化架構設計。它由Apache軟件基金會孵化并畢業&#xff0c;已成為分布式系統監控領域的明星項目。 核心特性 ?分布式追蹤?&#xff1a;跨服務調用鏈路的完整追蹤?服務…

Matlab程序設計基礎

matlab程序設計基礎 程序設計函數文件1.函數文件的基本結構2.創建并使用函數文件的示例3.帶多個輸出的函數示例4.包含子函數的函數文件 流程控制1. if 條件語句2. switch 多分支選擇語句3. try-catch 異常處理語句ME與lasterr 4. while 循環語句5. for 循環語句break和continue…

Client-Side Path Traversal 漏洞學習筆記

近年來,隨著Web前端技術的飛速發展,越來越多的數據請求和處理邏輯被轉移到客戶端(瀏覽器)執行。這大大提升了用戶體驗,但也帶來了新的安全威脅。其中,Client-Side Path Traversal(客戶端路徑穿越,CSPT)作為一種新興的漏洞類型,逐漸受到安全研究者和攻擊者的關注。本文…

基于Socketserver+ThreadPoolExecutor+Thread構造的TCP網絡實時通信程序

目錄 介紹&#xff1a; 源代碼&#xff1a; Socketserver-服務端代碼 Socketserver客戶端代碼&#xff1a; 介紹&#xff1a; socketserver是一種傳統的傳輸層網絡編程接口&#xff0c;相比WebSocket這種應用層的協議來說&#xff0c;socketserver比較底層&#xff0c;soc…

【無標題】平面圖四色問題P類歸屬的嚴格論證——基于拓撲收縮與動態調色算法框架

平面圖四色問題P類歸屬的嚴格論證——基于拓撲收縮與動態調色算法框架 --- #### **核心定理** 任意平面圖 \(G (V, E)\) 的四色著色問題可在多項式時間 \(O(|V|^2)\) 內求解&#xff0c;且算法正確性由以下三重保證&#xff1a; 1. **拓撲不變性**&#xff08;Kuratowsk…

HALCON 深度學習訓練 3D 圖像的幾種方式優缺點

HALCON 深度學習訓練 3D 圖像的幾種方式優缺點 ** 在計算機視覺和工業檢測等領域&#xff0c;3D 圖像數據的處理和分析變得越來越重要&#xff0c;HALCON 作為一款強大的機器視覺軟件&#xff0c;提供了多種深度學習訓練 3D 圖像的方式。每種方式都有其獨特的設計思路和應用場…

pytest中的元類思想與實戰應用

在Python編程世界里&#xff0c;元類是一種強大而高級的特性&#xff0c;它能在類定義階段深度定制類的創建與行為。而pytest作為熱門的測試框架&#xff0c;雖然沒有直接使用元類&#xff0c;但在設計機制上&#xff0c;卻暗含了許多與元類思想相通的地方。接下來&#xff0c;…

以太網幀結構和封裝【三】-- TCP/UDP頭部信息

TCP頭部用于建立可靠連接、流量控制及數據完整性校驗。 Ipv4封裝tcp報&#xff1a; Ipv6封裝tcp報&#xff1a; UDP頭部信息 UDP關鍵協議特性&#xff1a; 1&#xff09;無連接&#xff1a;無需握手&#xff0c;直接發送數據。 2&#xff09;不可靠性&#xff1a;不保證數據…

MySQL補充知識點學習

書接上文&#xff1a;MySQL關系型數據庫學習&#xff0c;繼續看書補充MySQL知識點學習。 1. 基本概念學習 1.1 游標&#xff08;Cursor&#xff09; MySQL 游標是一種數據庫對象&#xff0c;它允許應用程序逐行處理查詢結果集&#xff0c;而不是一次性獲取所有結果。游標在需…

基于InternLM的情感調節大師FunGPT

基于書生系列大模型&#xff0c;社區用戶不斷創造出令人耳目一新的項目&#xff0c;從靈感萌發到落地實踐&#xff0c;每一個都充滿智慧與價值。“與書生共創”將陸續推出一系列文章&#xff0c;分享這些項目背后的故事與經驗。歡迎訂閱并積極投稿&#xff0c;一起分享經驗與成…

【拓撲】1639.拓撲排序

題目描述 這是 2018 2018 2018 年研究生入學考試中給出的一個問題&#xff1a; 以下哪個選項不是從給定的有向圖中獲得的拓撲序列&#xff1f; 現在&#xff0c;請你編寫一個程序來測試每個選項。 輸入格式 第一行包含兩個整數 N N N 和 M M M&#xff0c;分別表示有向圖…

macOS 上使用 Homebrew 安裝redis-cli

在 macOS 上使用 Homebrew 安裝 redis-cli&#xff08;Redis 命令行工具&#xff09;非常簡單&#xff0c;以下是詳細步驟&#xff1a; 1. 安裝 Redis&#xff08;包含 redis-cli&#xff09; 運行以下命令安裝 Redis&#xff1a; brew install redis這會安裝完整的 Redis 服…

Scratch節日 | 六一兒童節射擊游戲

六一兒童節快樂&#xff01;這款超有趣的 六一兒童節射擊游戲&#xff0c;讓你變身小貓弓箭手&#xff0c;守護節日的快樂時光&#xff01; &#x1f3ae; 游戲玩法 上下方向鍵&#xff1a;控制小貓的位置&#xff0c;自由移動&#xff0c;瞄準目標&#xff01; 空格鍵&#…