3,composer.json檔案
本文以laravel 5.4 為例
{
// 閱讀解析於 2017.05.25
// by Object
//
// 以下key中的dev指的是開發狀態下,如require-dev和autoload-dev都指開發狀態下的自動匯入和依賴
// dev狀態並不衝突非dev狀態
//
"name": "laravel/laravel", // 專案名稱
"description": "The Laravel Framework.", // 描述
"keywords": ["framework", "laravel"], // 關鍵詞
"license": "MIT", // 許可協議
"type": "project", // 型別
// 釋出狀態時的依賴
"require": {
"php": ">=5.6.4", // PHP版本
"barryvdh/laravel-debugbar": "^2.3", // laravel除錯皮膚元件,類似於TP的trace
"erusev/parsedown": "^1.6", // php的markdown元件
"laravel/framework": "5.4.*", // laravel框架,5.4版本
"laravel/passport": "^2.0", // laravel框架第三方登入的服務端元件
"laravel/tinker": "~1.0", // laravel的REPL支援
"league/html-to-markdown": "^4.4", // PHP的html和markdown互相轉變的元件
"naux/auto-correct": "^1.0", // 自動給中英文之間加入合理的空格並糾正專用名詞大小寫
"orangehill/iseed": "^2.3", // 根據現有資料庫生成遷移檔案的元件
"overtrue/laravel-lang": "^3.0", // 對laravel5的52種語言支援的元件
"predis/predis": "^1.1", // php互動redis的元件
"suin/php-rss-writer": "^1.5", // PHP 5.4 的簡單RSS編輯器庫
"tom-lingham/searchy": "^2.0",// PHP基於Mysql的模糊查詢工具
"zgldh/qiniu-laravel-storage": "^0.6.3" // laravel 5 的七牛雲sdk
},
// 開發狀態時的依賴
"require-dev": {
"barryvdh/laravel-ide-helper": "^2.3", // 在生成Facade的同時自動生成PHPDocs的元件
"fzaninotto/faker": "~1.4", // PHP用於生成假資料的元件
"mockery/mockery": "0.9.*", // PHPUnit單元測試Mock元件
"phpunit/phpunit": "~5.7", // PHP單元測試測試框架
"symfony/css-selector": "3.1.*", // css選擇器元件
"symfony/dom-crawler": "3.1.*" // PHP dom元件
},
// 自動載入
"autoload": {
// 類圖載入模式,即建立檔案和類的自動關係
// 如下面的定義,表示指定了database資料夾
// 當composer在 install/update 的時候,會掃描去掃描database資料夾下的所有.php、.inc檔案,將它們內建的類載入進來
"classmap": [
"database"
],
// psr-4 / psr-0
// FIG組織制定的一組PHP相關規範,簡稱PSR,其中:
// PSR-0:自動載入
// PSR-1:基本程式碼規範
// PSR-2:程式碼樣式
// PSR-3:日誌介面
// PSR-4:自動載入
// 目前就這五個規範,乍一看,PSR-0和PSR-4是重複了
// 他們雖然功能有所重複,但實際上區別還是有的
// PSR-4的規範比較乾淨,不再相容PHP5.3以前的版本,有一點PSR-0升級版的感覺
// 當然,PSR-4也不是要完全替代PSR-0,而是在必要的時候補充PSR-0
// 當然,如果你願意,PSR-4也可以替代PSR-0
// PSR-4可以和包括PSR-0在內的其他自動載入機制共同使用
//
//
// 這組自動載入規則,簡單說就是希望通過一組約定的目錄,檔名,類名定義方式,來實現快速通過類查詢到檔案,然後包含進來,實現自動載入
// psr-0中,類名中的下劃線會被轉換成目錄分隔符,而psr-4則無任何意義
"psr-4": {
"App\\": "app/", // 表示 “app/”目錄的名稱空間為 App\
"Models\\": "models/",// 表示 “models/”目錄的名稱空間為 Models\
"Persimmon\\": "app/Persimmon" // 表示 “app/Persimmon/”目錄的名稱空間為 Persimmon\
},
// 指定檔案的載入模式,通常用於載入函式庫,即通常沒有什麼名稱空間的,程式導向式的檔案 composer dump-autoload 可重建自動載入資訊
"files": [
"app/Helper/function.php"
]
},
// 開發狀態下的自動載入
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/" // tests資料夾下的名稱空間為Tests
}
},
// composer中的指令碼,可以是一個 PHP 回撥(定義為靜態方法),也可以是任何命令列可執行的命令。
// 在 Composer 執行過程中,指令碼對於“執行一個資源包的自定義程式碼”或“包專用命令”是非常有用的。
// 只有在根包中定義scripts才有用,外部依賴的composer.json中定義了scripts是不會被執行的
"scripts": {
// 以下key指的是 執行指令碼的事件,value是一個陣列,定義了當觸發該事件時,要執行的指令碼
// 在 create-project 命令期間,根包安裝完成後觸發(注意,事件觸發於“命令期間”、“根包安裝完成後”)
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\"" // 該命令會判斷.env檔案是否存在,如果不存在則把.env.example複製成.env
],
// 在 create-project 命令執行後觸發
"post-create-project-cmd": [
"php artisan key:generate" // 專案建立完成後,根據字串“generate”生成key
],
// 在 install 命令執行後觸發
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"php artisan optimize" // 優化應用程式效能,生成自動載入檔案,且產生聚合編譯檔案 bootstrap/compiled.php
],
// 在 update 命令執行後觸發
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"php artisan ide-helper:generate",
"php artisan ide-helper:meta",
"php artisan optimize"
]
},
// 專案配置
"config": {
// 設定 Composer 的預設安裝方法
"preferred-install": "dist",
"sort-packages": true
},
// 自定義的包資源庫
// 預設情況下 composer 只使用 packagist 作為包的資源庫。
// repositories 並不是遞迴呼叫的,只能在“Root包”的 composer.json 中定義,附屬包中的 composer.json 將被忽略。
//
"repositories": {
"packagist": {
// type指資源型別
// composer: composer 型別的資源庫
// vcs: 從 git、svn 和 hg 取得資源。
// pear: 從 pear 獲取資源。
// package: 如果你依賴於一個專案,它不提供任何對 composer 的支援,你就可以使用這種型別。你基本上就只需要內聯一個 composer.json 物件
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
}
laravel 核心框架的檔案在require中被包含,一切外部依賴都放在vendor中,它們都是相對獨立的元件,核心框架也是一個獨立的元件。
vendor目錄下的元件會依賴於根目錄下的部分資料夾
相關文章
- composer.json 檔案引數詳解JSON
- ext3grep ext3檔案系統下恢復檔案
- 3 springboot配置檔案Spring Boot
- PE檔案結構解析3
- vue3 路由檔案配置Vue路由
- 3Ds Max檔案匯出為Mesh格式檔案-OGRE3D
- 【Solaris】Solaris檔案系統管理3 ZFS檔案系統的建立
- SQLite3 匯出 CSV 檔案SQLite
- [PY3]——IO——檔案讀寫
- Python 3 操作json 檔案PythonJSON
- Nuxt3讀取markdown檔案UX
- Linux 檔案系統-ext3 檔案系統介紹(轉)Linux
- 3dmax自動儲存的檔案在哪裡 3dmax自動存的檔案位置3D
- 3、Webserver如何處理動態檔案WebServer
- python3執行.sql檔案PythonSQL
- Python3之檔案操作filePython
- python3 大檔案去重Python
- 1-3-2檔案操作進階
- Python3 檔案操作詳解Python
- AWS 亞馬遜S3檔案上傳亞馬遜S3
- python3 socket檔案傳輸Python
- Python3中檔案處理Python
- Java NIO3:通道和檔案通道Java
- PE教程3: File Header (檔案頭)Header
- vue3 匯出為Excel檔案VueExcel
- 580.“選定建立檔案的型別”形成的檔案是以什麼命名?,3新增附件,3附件,3想法,T3選單欄...型別
- 控制檔案丟失恢復例項(3) - 使用重建控制檔案方式(noresetlogs)
- 處理 Linux 檔案的 3 個技巧Linux
- QQ音樂MP3檔案下載
- [開發教程]第3講:包含Bootstrap檔案boot
- 【小程式】切割和合並mp3檔案
- Python(3):檔案讀寫與異常Python
- unity3d下載Obb分包檔案Unity3D
- Android合併檔案的3種方式Android
- 恢復誤刪檔案ext3grep
- RMAN 恢復之控制檔案篇(3/5)
- 分析Oracle資料庫日誌檔案(3)Oracle資料庫
- Linux下格式化檔案為ext3,mount檔案到目錄上Linux