PHP依賴(lài)管理工具:Composer

PHP自己有一個(gè)叫pecl的代碼類(lèi)庫(kù)。可以使用工具pear來(lái)獲取pecl庫(kù)中的代碼。但是現(xiàn)在聽(tīng)說(shuō)比較難用,于是就誕生了Composer。我就不做太多的介紹了,下面給出一些鏈接,有興趣的同學(xué)自己可以去看看。有很多別人寫(xiě)好的非常優(yōu)秀的類(lèi)庫(kù)。
英文官網(wǎng):https://getcomposer.org/
代碼庫(kù):https://packagist.org/
中文網(wǎng)站:http://www.phpcomposer.com/

Composer的安裝

(1)Windows安裝Composer
我使用的是XAMPP,在xampp\php的目錄下新建一個(gè)文件夾取名“composer”,下載composer.phar到此目錄。在composer目錄新建名為“composer.bat”的命令行文件。添加內(nèi)容:

@php "%~dp0composer.phar" %*

1

添加xampp\php目錄和xampp\php\composer目錄到環(huán)境變量中
2

(2)Mac、Linux安裝Composer
對(duì)于Mac和Linux而言,把下載到的composer.par文件改名為composer,然后移動(dòng)到系統(tǒng)的命令目錄(對(duì)于Mac和Linux而言通常是/usr/local/bin)。
由于Mac自帶PHP環(huán)境因此就直接可以再teminal里使用composer了,而對(duì)于沒(méi)有自帶安裝PHP環(huán)境的Linux而言就需要安裝好PHP環(huán)境,并確保在composer的同目錄中添加PHP可執(zhí)行文件的符號(hào)鏈接。

Composer的使用

1. 初始化一個(gè)Composer項(xiàng)目

(1)先定位到我項(xiàng)目的根目錄:

d:
cd xampp/htdocs/myProject

(2)然后就可以執(zhí)行composer的命令了:

composer init
2. Composer倉(cāng)庫(kù)packagist需要CA證書(shū)

Composer使用的是OpenSSl訪問(wèn)了packagegit.org的代碼倉(cāng)庫(kù)的。所以需要我們提供自己的證書(shū)。
我用的是XAMPP,在xampp\perl\vendor\lib\Mozilla\CA目錄下有這個(gè)證書(shū)——cacert.pem。如果沒(méi)有也可以自己去下載cacert.pem放到自己想放的目錄。
然后在php.ini中打開(kāi)擴(kuò)展:

extension=php_openssl.dll

最后在php.ini中添加CA證書(shū)的路徑:

[Mozilla CA]
openssl.cafile= D:\xampp\perl\vendor\lib\Mozilla\CA\cacert.pem
3. 通過(guò)composer來(lái)管理bower和npm的資源

對(duì)于Composer而言,他是一個(gè)php類(lèi)庫(kù)依賴(lài)管理工具。對(duì)于bootstrap和jQuery等Css、Javascript庫(kù)就需要bower和npm來(lái)管理。但是我們可以通過(guò)給Composer全局(global)安裝一個(gè)composer asset plugin插件來(lái)處理這些前端代碼庫(kù)。命令如下:

composer global require "fxp/composer-asset-plugin:~1.1.1"

Paste_Image.png

composer asset plugin還支持一些自定義的設(shè)置,參看composer asset plugin wiki文檔。比如Yii2(我所使用的一個(gè)PHP框架)的項(xiàng)目中就使用了Define a custom directory for the assets installation(自定義資源安裝目錄)這一功能。在默認(rèn)情況下composer asset plugin插件會(huì)把bower和npm的庫(kù)安裝到'vendor/bower-asset''vendor/npm-asset'目錄。通過(guò)在composer.json的"extra"中設(shè)置"asset-installer-paths"可以實(shí)現(xiàn)更改安裝目錄的需求,代碼如下:

"extra": {
  "asset-installer-paths": {
    "npm-asset-library": "vendor/npm", 
    "bower-asset-library": "vendor/bower" 
  }
}
在Yii2中使用前端庫(kù)(Bower and NPM Assets)

大多數(shù) JavaScript、CSS 庫(kù)通過(guò)BowerNPM管理, 如果你的應(yīng)用或擴(kuò)展使用這些庫(kù),推薦你遵循以下步驟來(lái)管理庫(kù)中的資源:
(1)修改應(yīng)用或擴(kuò)展的 composer.json文件將庫(kù)名列入require中, 應(yīng)使用"bower-asset/PackageName"(Bower包)或"npm-asset/PackageName"(NPM包)來(lái)對(duì)應(yīng)你所需的前端庫(kù)。
(2)創(chuàng)建一個(gè)資源類(lèi)并將你的應(yīng)用或擴(kuò)展要使用的JavaScript、CSS 文件列入到類(lèi)中, 應(yīng)設(shè)置yii\web\AssetBundle::sourcePath屬性為"@bower/PackageName""@npm/PackageName",因?yàn)楦鶕?jù)別名Composer會(huì)安裝Bower或NPM包到對(duì)應(yīng)的目錄下。
(3)注意: 一些包會(huì)將它們分布式文件放到一個(gè)子目錄中,對(duì)于這種情況,應(yīng)指定子目錄作為yii\web\AssetBundle::sourcePath屬性值,例如,yii\web\JqueryAsset使用 "@bower/jquery/dist"而不是 "@bower/jquery"。
(4)Yii2中Bower和NPM中資源的發(fā)布默認(rèn)情況下,當(dāng)資源被發(fā)布的時(shí)候,所有在yii\web\AssetBundle::$sourcePath目錄下的資源和文件夾都會(huì)被發(fā)布。當(dāng)然你也可以通過(guò)publishOptions來(lái)自定義需要發(fā)布的內(nèi)容。例如,如果只想要發(fā)布yii\web\AssetBundle::$sourcePath下面的一個(gè)或者幾個(gè)資源,你可以寫(xiě)如下的類(lèi):

<?php
namespace app\assets;
use yii\web\AssetBundle;

class FontAwesomeAsset extends AssetBundle 
{    
  public $sourcePath = '@bower/font-awesome';     
  public $css = [
    'css/font-awesome.min.css',
  ];    
  public $publishOptions = [
    'only' => [
      'fonts/',
      'css/',
    ]
  ];
}

以上的例子是定義fontawesome的資源類(lèi)。通過(guò)指定了only選項(xiàng), 只有fonts和css這兩個(gè)子選項(xiàng)會(huì)被發(fā)布。

GitHub API rate limit 問(wèn)題

由于GitHub對(duì)不明身份的主機(jī)獲取代碼進(jìn)行了限制,因此在使用Composer安裝或者更新的時(shí)候會(huì)提示讓你輸入GitHub的token。
解決辦法是:
訪問(wèn)GitHub網(wǎng)站,到Y(jié)our Profile > Edit Profile > Personal access tokens > Generate new token生成一個(gè)token值,復(fù)制到Composer的命令行需要輸入token的地方即可。如果沒(méi)有成功的話還可以使用以下命令來(lái)單獨(dú)設(shè)置token:

composer config -g github-oauth.github.com your-token

成功后會(huì)在C:\Users\Username\AppData\Roaming\Composer(Mac的話是:/Users/Username/.composer)目錄下生成一個(gè)auth.json文件。這個(gè)文件里面就保存了你的GitHub的token。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容