国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
正確安裝全局 Composer 包
該工具不應(yīng)該/不能做什么?
接下來是什么?
關(guān)于 Composer 全局 Require 的常見問題
為什么使用 Composer 的全局 require 被認(rèn)為是有害的?
Composer 全局 require 的替代方案是什么?
cgr 如何幫助避免全局依賴問題?
如何安裝和使用 cgr?
Composer 中本地安裝和全局安裝有什么區(qū)別?
如何在 Composer 中管理全局依賴項(xiàng)?
我可以在 Composer 中同時(shí)使用本地安裝和全局安裝嗎?
不正確管理 Composer 中的依賴項(xiàng)有哪些風(fēng)險(xiǎn)?
如何解決 Composer 中的依賴沖突?
如何保持 Composer 依賴項(xiàng)的最新狀態(tài)?
首頁 后端開發(fā) php教程 作曲家全球需要被認(rèn)為有害嗎?

作曲家全球需要被認(rèn)為有害嗎?

Feb 15, 2025 pm 01:24 PM

Composer Global Require Considered Harmful?

關(guān)鍵要點(diǎn)

  • 除非全局安裝的包沒有依賴項(xiàng),否則將 composer global require 用于安裝跨多個(gè)項(xiàng)目使用的包現(xiàn)在被許多人認(rèn)為是不好的做法。這是因?yàn)楫?dāng)包共享相同的空間時(shí),可能會(huì)發(fā)生依賴沖突。
  • 另一種解決方案是使用 composer require 將每個(gè)命令行工具安裝到其自己的本地項(xiàng)目中,手動(dòng)管理 $PATH 或二進(jìn)制文件。但是,這可能會(huì)增加復(fù)雜性和乏味性。對(duì)全局命令的建議更改可能會(huì)看到一個(gè)“全局的”但隔離的項(xiàng)目安裝到特定位置,其供應(yīng)商和 bin 目錄出現(xiàn)在它們通常的位置。
  • 一個(gè)新的工具 cgr (Composer Global Require) 已經(jīng)被開發(fā)出來作為全局實(shí)現(xiàn)的替代方案。它為每個(gè)包創(chuàng)建隔離的安裝,避免全局依賴問題。但是,此工具仍處于概念驗(yàn)證階段,可能會(huì)發(fā)生更改。建議對(duì)其進(jìn)行測(cè)試,但此時(shí)不要過度依賴它。

我們之前討論過 Composer 的最佳實(shí)踐,我一直提倡在安裝可在多個(gè)項(xiàng)目中使用的包(特別是命令行工具)時(shí)使用 composer global require。然后,有一天,我遇到了這個(gè)討論。

Composer Global Require Considered Harmful?

簡而言之,現(xiàn)在大多數(shù)人似乎覺得全局 require 是不好的做法,除非全局安裝的包沒有依賴項(xiàng)。從技術(shù)上講,當(dāng)一個(gè)人對(duì)所有項(xiàng)目使用單個(gè)環(huán)境時(shí),這是有意義的,但正如我在該討論中評(píng)論的那樣,當(dāng)每個(gè)項(xiàng)目使用虛擬機(jī)或像 Docker 這樣的適當(dāng)隔離的環(huán)境時(shí),這個(gè)問題就無關(guān)緊要了,全局實(shí)際上不會(huì)造成損害。

OP 對(duì)此問題的建議解決方案是:

作為替代方案,用戶應(yīng)該使用 composer require 將每個(gè)命令行工具安裝到其自己的本地項(xiàng)目中,并手動(dòng)管理其 $PATH 或二進(jìn)制文件(例如,通過從 $PATH 中已有的 bin 目錄創(chuàng)建符號(hào)鏈接)。

對(duì)我來說,這是一個(gè)完全不可接受的復(fù)雜化。Composer 一直是 PHP 的驕傲,因?yàn)樗子谑褂?,并且使包管理變得?duì)新手友好——本地 全局。必須四處創(chuàng)建符號(hào)鏈接(尤其要考慮到像 Windows 這樣的非符號(hào)鏈接操作系統(tǒng))會(huì)增加乏味感。然后,OP 進(jìn)一步建議更改全局命令的工作方式:

可以將一個(gè)“全局的”但隔離的項(xiàng)目安裝到 ~/.composer/global/[something];其供應(yīng)商和 bin 目錄將出現(xiàn)在它們通常的位置,并且 ~/.composer/global/[something]/bin 目錄的內(nèi)容可以在 ~/.composer/vendor/bin 中鏡像(通過符號(hào)鏈接),或者更好的選擇可能是 ~/.composer/bin。字符串 [something] 可以通過多種方式選擇;最直接的方法是 org/project(盡管這意味著將存在像 ~/.composer/global/org/project/vendor/org/project 這樣的長路徑)。

我完全同意這種方法,它似乎是兩全其美的。顯然,這可能會(huì)導(dǎo)致一些向后兼容性問題,但這并不意味著它不能在 Composer 的 2.0 版本中發(fā)生。Taylor Otwell 在下面進(jìn)一步回應(yīng)了這種觀點(diǎn):

完全同意。能夠?qū)⒚總€(gè) composer 全局安裝的包安裝到其自己的隔離目錄中,并擁有其自己的隔離依賴項(xiàng),而不是可能與其他全局安裝的包沖突,這將是令人驚奇的。

在此之后,本著真正的開源精神,OP 隨后將替代全局實(shí)現(xiàn)構(gòu)建為一個(gè)單獨(dú)的工具:cgr。讓我們看看它是如何工作的。

CGR – Composer 全局 Require 替代方案

我將在 Homestead Improved 實(shí)例上執(zhí)行以下所有命令

要開始使用 CGR,我們將其作為全局包安裝。

composer global require consolidation/cgr

如果 Composer 的 bin 文件夾不在 PATH 變量中,請(qǐng)?zhí)砑铀?/p>

echo "export PATH=$PATH:$HOME/.composer/vendor/bin/" >> ~/.bashrc
echo "export CGR_BIN_DIR=$HOME/.composer/vendor/bin" >> ~/.bashrc
source ~/.bashrc

以上命令使用 Composer 的全局 bin 目錄的路徑擴(kuò)展 $PATH 環(huán)境變量(Homestead Improved 上的默認(rèn)位置——你的位置可能不同)。第二個(gè)命令配置 cgr 使用的 bin 目錄,而第三個(gè)命令加載這些更改。這些也將在每次以該用戶身份運(yùn)行終端界面時(shí)自動(dòng)加載(在我的情況下,通過 vagrant ssh 使用 Vagrant)。

然后可以通過運(yùn)行 cgr 來訪問 CGR,它應(yīng)該輸出 Composer 的一般幫助文件。

正確安裝全局 Composer 包

cgr phpunit/phpunit

在 Homestead Improved 上,配置了一個(gè)有用的別名,在其中鍵入 phpunit 會(huì)擴(kuò)展為 vendor/bin/phpunit,這在每個(gè)項(xiàng)目安裝 phpunit 時(shí)非常方便,因此可以從根文件夾運(yùn)行它。為了測(cè)試 PhpUnit 的全局安裝,我們需要先刪除此別名(在 ~/.bash_aliases 中注釋相應(yīng)的行),然后退出 shell 并重新進(jìn)入,以便別名重新加載。然后,使用版本輸出運(yùn)行這個(gè)新全局安裝的 PhpUnit 應(yīng)該產(chǎn)生類似以下內(nèi)容:

vagrant@homestead:~$ phpunit --version
PHPUnit 5.4.2 by Sebastian Bergmann and contributors.

現(xiàn)在讓我們嘗試安裝兩個(gè)不兼容的包。

cgr laravel/installer
cgr wp-cli/wp-cli

當(dāng)然,它們都可以正常安裝。讓我們檢查它們是否有效。

composer global require consolidation/cgr

一切順利!以前由于依賴項(xiàng)不匹配而發(fā)生沖突的全局包現(xiàn)在可以并排共存,并且可以在整個(gè)操作系統(tǒng)中使用,而不會(huì)出現(xiàn)任何問題!

該工具不應(yīng)該/不能做什么?

在某些情況下,您可能希望安裝 Composer 插件。如限制部分所述,由于 CGR 將每個(gè)全局包安裝到其自己的文件夾中并擁有其自己的依賴項(xiàng)樹,因此這些插件不會(huì)在所有全局項(xiàng)目中全局可用。因此,如果您想安裝更改 composer 通用行為的插件,您仍然應(yīng)該使用 composer global require 而不是 cgr。例如,CGR 本身就是這樣一個(gè)插件。

接下來是什么?

測(cè)試,測(cè)試,測(cè)試!如果您是全局 require 命令的常用用戶,我強(qiáng)烈建議您測(cè)試這個(gè)新工具,并向 Greg Anderson 提供一些反饋,說明它在多大程度上滿足了您的全局需求,以及是否有任何改進(jìn)之處。

請(qǐng)注意,此工具目前只是一個(gè)概念驗(yàn)證,實(shí)現(xiàn)方式可能會(huì)或可能不會(huì)重命名、重新打包、最終集成到 Composer 的核心等等。換句話說,盡可能多地使用它,但暫時(shí)不要過度依賴它。

在您的全局包安裝的同時(shí),為什么不告訴我們您對(duì) composer global require 的看法呢?它像許多人現(xiàn)在認(rèn)為的那樣有害嗎?還是僅僅是謹(jǐn)慎行事和擁有隔離的開發(fā)環(huán)境的問題?其他什么?請(qǐng)?jiān)谙旅姘l(fā)表您的意見!

關(guān)于 Composer 全局 Require 的常見問題

為什么使用 Composer 的全局 require 被認(rèn)為是有害的?

Composer 的全局 require 被認(rèn)為是有害的,因?yàn)樗赡軐?dǎo)致依賴沖突。當(dāng)您全局安裝包時(shí),它們都共享相同的空間,這意味著它們共享相同的依賴項(xiàng)集。如果兩個(gè)包需要不同版本的相同依賴項(xiàng),則可能導(dǎo)致沖突和錯(cuò)誤。建議為每個(gè)項(xiàng)目安裝其自己的一組依賴項(xiàng),以避免此類問題。

Composer 全局 require 的替代方案是什么?

不要使用 Composer 的全局 require,您可以為每個(gè)需要的工具創(chuàng)建一個(gè)新的 Composer 項(xiàng)目。這樣,每個(gè)工具將擁有自己的一組依賴項(xiàng),從而降低沖突的風(fēng)險(xiǎn)。您還可以使用 cgr 等工具,它為每個(gè)包創(chuàng)建隔離的安裝,從而避免全局依賴問題。

cgr 如何幫助避免全局依賴問題?

CGR(Composer 全局 Require)是一個(gè)為每個(gè)包創(chuàng)建隔離安裝的工具。這意味著每個(gè)包及其依賴項(xiàng)都安裝在其自己的單獨(dú)目錄中,避免了不同包的依賴項(xiàng)之間發(fā)生沖突的風(fēng)險(xiǎn)。這使其成為使用 Composer 全局 require 的更安全替代方案。

如何安裝和使用 cgr?

要安裝 cgr,您可以使用命令 composer global require consolidation/cgr。安裝后,您可以像使用 Composer 的全局 require 一樣使用 cgr。例如,要安裝包,您可以使用命令 cgr require package-name。

Composer 中本地安裝和全局安裝有什么區(qū)別?

在 Composer 中,本地安裝意味著包及其依賴項(xiàng)安裝在項(xiàng)目的目錄中。這是安裝包的推薦方法,因?yàn)樗梢员苊庖蕾嚊_突。另一方面,全局安裝將包及其依賴項(xiàng)安裝在全局目錄中,如果不同的包需要不同版本的相同依賴項(xiàng),則可能導(dǎo)致沖突。

如何在 Composer 中管理全局依賴項(xiàng)?

由于存在沖突的風(fēng)險(xiǎn),在 Composer 中管理全局依賴項(xiàng)可能具有挑戰(zhàn)性。但是,像 cgr 這樣的工具可以通過為每個(gè)包創(chuàng)建隔離的安裝來提供幫助。您還可以通過為每個(gè)需要的工具創(chuàng)建一個(gè)新的 Composer 項(xiàng)目來管理全局依賴項(xiàng),確保每個(gè)工具都擁有自己的一組依賴項(xiàng)。

我可以在 Composer 中同時(shí)使用本地安裝和全局安裝嗎?

是的,您可以在 Composer 中同時(shí)使用本地安裝和全局安裝。但是,建議盡可能使用本地安裝以避免依賴沖突。如果您需要全局使用包,請(qǐng)考慮使用 cgr 等工具來創(chuàng)建隔離的安裝。

不正確管理 Composer 中的依賴項(xiàng)有哪些風(fēng)險(xiǎn)?

不正確管理 Composer 中的依賴項(xiàng)可能導(dǎo)致沖突和錯(cuò)誤。如果兩個(gè)包需要不同版本的相同依賴項(xiàng),則可能會(huì)導(dǎo)致難以調(diào)試的問題。它還可能導(dǎo)致應(yīng)用程序出現(xiàn)意外行為,因?yàn)椴煌姹镜囊蕾図?xiàng)可能具有不同的功能和行為。

如何解決 Composer 中的依賴沖突?

要解決 Composer 中的依賴沖突,您可以嘗試將包更新到最新版本,因?yàn)檫@可能會(huì)解決沖突。如果這不起作用,您可能需要重新考慮您正在使用的包并找到?jīng)]有沖突依賴項(xiàng)的替代方案。像 cgr 這樣的工具也可以通過為每個(gè)包創(chuàng)建隔離的安裝來提供幫助。

如何保持 Composer 依賴項(xiàng)的最新狀態(tài)?

要保持 Composer 依賴項(xiàng)的最新狀態(tài),您可以使用 composer update 命令。這會(huì)根據(jù) composer.json 文件中指定的版本約束將所有包更新到其最新版本。您還可以使用 composer outdated 命令查看哪些包有可用的較新版本。

以上是作曲家全球需要被認(rèn)為有害嗎?的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

我如何了解最新的PHP開發(fā)和最佳實(shí)踐? 我如何了解最新的PHP開發(fā)和最佳實(shí)踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什么是PHP,為什么它用于Web開發(fā)? 什么是PHP,為什么它用于Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設(shè)置PHP時(shí)區(qū)? 如何設(shè)置PHP時(shí)區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

我如何驗(yàn)證PHP中的用戶輸入以確保其符合某些標(biāo)準(zhǔn)? 我如何驗(yàn)證PHP中的用戶輸入以確保其符合某些標(biāo)準(zhǔn)? Jun 22, 2025 am 01:00 AM

TovalidateuserinputinPHP,usebuilt-invalidationfunctionslikefilter_var()andfilter_input(),applyregularexpressionsforcustomformatssuchasusernamesorphonenumbers,checkdatatypesfornumericvalueslikeageorprice,setlengthlimitsandtrimwhitespacetopreventlayout

編寫清潔和可維護(hù)的PHP代碼的最佳實(shí)踐是什么? 編寫清潔和可維護(hù)的PHP代碼的最佳實(shí)踐是什么? Jun 24, 2025 am 12:53 AM

寫干凈、易維護(hù)的PHP代碼關(guān)鍵在于清晰命名、遵循標(biāo)準(zhǔn)、合理結(jié)構(gòu)、善用注釋和可測(cè)試性。1.使用明確的變量、函數(shù)和類名,如$userData和calculateTotalPrice();2.遵循PSR-12標(biāo)準(zhǔn)統(tǒng)一代碼風(fēng)格;3.按職責(zé)拆分代碼結(jié)構(gòu),使用MVC或Laravel式目錄組織;4.避免面條式代碼,將邏輯拆分為單一職責(zé)的小函數(shù);5.在關(guān)鍵處添加注釋并撰寫接口文檔,明確參數(shù)、返回值和異常;6.提高可測(cè)試性,采用依賴注入、減少全局狀態(tài)和靜態(tài)方法。這些做法提升代碼質(zhì)量、協(xié)作效率和后期維護(hù)便利性。

什么是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? 什么是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? Jun 22, 2025 am 01:03 AM

thephpfunctionserize()andunSerialize()redustoconvertComplexdatStructDestoresToroStoroStoroSandaBackagagain.1.Serialize()

如何將PHP代碼嵌入HTML文件中? 如何將PHP代碼嵌入HTML文件中? Jun 22, 2025 am 01:00 AM

可以將PHP代碼嵌入HTML文件中,但需確保文件以.php為擴(kuò)展名,以便服務(wù)器能正確解析。使用標(biāo)準(zhǔn)的標(biāo)簽包裹PHP代碼,可在HTML中任意位置插入動(dòng)態(tài)內(nèi)容。此外,可在同一文件中多次切換PHP與HTML,實(shí)現(xiàn)條件渲染等動(dòng)態(tài)功能。務(wù)必注意服務(wù)器配置及語法正確性,避免因短標(biāo)簽、引號(hào)錯(cuò)誤或遺漏結(jié)束標(biāo)簽導(dǎo)致問題。

如何使用PHP執(zhí)行SQL查詢? 如何使用PHP執(zhí)行SQL查詢? Jun 24, 2025 am 12:54 AM

Yes,youcanrunSQLqueriesusingPHP,andtheprocessinvolveschoosingadatabaseextension,connectingtothedatabase,executingqueriessafely,andclosingconnectionswhendone.Todothis,firstchoosebetweenMySQLiorPDO,withPDObeingmoreflexibleduetosupportingmultipledatabas

See all articles