PHP自己有一個叫pecl的代碼類庫。可以使用工具pear來獲取pecl庫中的代碼。但是現在聽說比較難用,于是就誕生了Composer。我就不做太多的介紹了,下面給出一些鏈接,有興趣的同學自己可以去看看。有很多別人寫好的非常優秀的類庫。
英文官網:https://getcomposer.org/
代碼庫:https://packagist.org/
中文網站:http://www.phpcomposer.com/
Composer的安裝
(1)Windows安裝Composer
我使用的是XAMPP,在xampp\php的目錄下新建一個文件夾取名“composer”,下載composer.phar到此目錄。在composer目錄新建名為“composer.bat”的命令行文件。添加內容:
@php "%~dp0composer.phar" %*
添加xampp\php目錄和xampp\php\composer目錄到環境變量中
(2)Mac、Linux安裝Composer
對于Mac和Linux而言,把下載到的composer.par文件改名為composer,然后移動到系統的命令目錄(對于Mac和Linux而言通常是/usr/local/bin)。
由于Mac自帶PHP環境因此就直接可以再teminal里使用composer了,而對于沒有自帶安裝PHP環境的Linux而言就需要安裝好PHP環境,并確保在composer的同目錄中添加PHP可執行文件的符號鏈接。
Composer的使用
1. 初始化一個Composer項目
(1)先定位到我項目的根目錄:
d:
cd xampp/htdocs/myProject
(2)然后就可以執行composer的命令了:
composer init
2. Composer倉庫packagist需要CA證書
Composer使用的是OpenSSl訪問了packagegit.org的代碼倉庫的。所以需要我們提供自己的證書。
我用的是XAMPP,在xampp\perl\vendor\lib\Mozilla\CA目錄下有這個證書——cacert.pem。如果沒有也可以自己去下載cacert.pem放到自己想放的目錄。
然后在php.ini中打開擴展:
extension=php_openssl.dll
最后在php.ini中添加CA證書的路徑:
[Mozilla CA]
openssl.cafile= D:\xampp\perl\vendor\lib\Mozilla\CA\cacert.pem
3. 通過composer來管理bower和npm的資源
對于Composer而言,他是一個php類庫依賴管理工具。對于bootstrap和jQuery等Css、Javascript庫就需要bower和npm來管理。但是我們可以通過給Composer全局(global)安裝一個composer asset plugin插件來處理這些前端代碼庫。命令如下:
composer global require "fxp/composer-asset-plugin:~1.1.1"
composer asset plugin還支持一些自定義的設置,參看composer asset plugin wiki文檔。比如Yii2(我所使用的一個PHP框架)的項目中就使用了Define a custom directory for the assets installation(自定義資源安裝目錄)這一功能。在默認情況下composer asset plugin插件會把bower和npm的庫安裝到
'vendor/bower-asset'
和'vendor/npm-asset'
目錄。通過在composer.json的"extra"
中設置"asset-installer-paths"
可以實現更改安裝目錄的需求,代碼如下:
"extra": {
"asset-installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
在Yii2中使用前端庫(Bower and NPM Assets)
大多數 JavaScript、CSS 庫通過Bower 和 NPM管理, 如果你的應用或擴展使用這些庫,推薦你遵循以下步驟來管理庫中的資源:
(1)修改應用或擴展的 composer.json文件將庫名列入require中, 應使用"bower-asset/PackageName"
(Bower包)或"npm-asset/PackageName"
(NPM包)來對應你所需的前端庫。
(2)創建一個資源類并將你的應用或擴展要使用的JavaScript、CSS 文件列入到類中, 應設置yii\web\AssetBundle::sourcePath
屬性為"@bower/PackageName"
或 "@npm/PackageName"
,因為根據別名Composer會安裝Bower或NPM包到對應的目錄下。
(3)注意: 一些包會將它們分布式文件放到一個子目錄中,對于這種情況,應指定子目錄作為yii\web\AssetBundle::sourcePath
屬性值,例如,yii\web\JqueryAsset
使用 "@bower/jquery/dist"
而不是 "@bower/jquery"
。
(4)Yii2中Bower和NPM中資源的發布默認情況下,當資源被發布的時候,所有在yii\web\AssetBundle::$sourcePath
目錄下的資源和文件夾都會被發布。當然你也可以通過publishOptions
來自定義需要發布的內容。例如,如果只想要發布yii\web\AssetBundle::$sourcePath
下面的一個或者幾個資源,你可以寫如下的類:
<?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的資源類。通過指定了only選項, 只有fonts和css這兩個子選項會被發布。
GitHub API rate limit 問題
由于GitHub對不明身份的主機獲取代碼進行了限制,因此在使用Composer安裝或者更新的時候會提示讓你輸入GitHub的token。
解決辦法是:
訪問GitHub網站,到Your Profile > Edit Profile > Personal access tokens > Generate new token生成一個token值,復制到Composer的命令行需要輸入token的地方即可。如果沒有成功的話還可以使用以下命令來單獨設置token:
composer config -g github-oauth.github.com your-token
成功后會在C:\Users\Username\AppData\Roaming\Composer(Mac的話是:/Users/Username/.composer)目錄下生成一個auth.json文件。這個文件里面就保存了你的GitHub的token。