laravel/laravel和laravel/framework有何區別?

世有因果知因求果發表於2015-06-05

  在安裝laravel的時候,我們一般是download github上的laravel/laravel,隨後執行composer install,在這個過程中,你會發現composer其中的一項工作是

安裝laravel/framework到vendor目錄中,(為了看清楚這個過程,我們可以執行composer install --dry-run模擬安裝dependency的過程)。那麼laravel/laravel和laravel/framework到底是什麼關係呢?

(背景知識: laravel/laravel, laravel/framework被稱為github shorthand,實際上對應著github上的git repo。下面是類似composer的bower package manager安裝一個front end package時的情景:

# registered package
$ bower install jquery
# GitHub shorthand
$ bower install desandro/masonry
# Git endpoint
$ bower install git://github.com/user/package.git
# URL
$ bower install http://example.com/script.js

)

 (master)*$ composer install --dry-run                                                                                                                                                    
Warning: This development build of composer is over 30 days old. It is recommended to update it by running "/usr/local/bin/composer self-update" to get the latest version.              
Loading composer repositories with package information                                                                                                                                   
Installing dependencies (including require-dev)                                                                                                                                          
  - Installing vlucas/phpdotenv (v1.1.1)                                                                                                                                                 
                                                                                                                                                                                         
  - Installing symfony/var-dumper (v2.6.9)                                                                                                                                               
                                                                                                                                                                                         
  - Installing symfony/translation (v2.6.9)                                                                                                                                              
                                                                                                                                                                                         
  - Installing symfony/security-core (v2.6.9)                                                                                                                                            
                                                                                                                                                                                         
  - Installing symfony/routing (v2.6.9)                                                                                                                                                  
                                                                                                                                                                                         
  - Installing symfony/process (v2.6.9)                                                                                                                                                  
                                                                                                                                                                                         
  - Installing psr/log (1.0.0)                                                                                                                                                           
                                                                                                                                                                                         
  - Installing symfony/debug (v2.6.9)                                                                                                                                                                                            
  - Installing symfony/http-foundation (v2.6.9)                                                                                                                                          
                                                                                                                                                                                         
  - Installing symfony/event-dispatcher (v2.7.0)                                                                                                                                         
                                                                                                                                                                                         
  - Installing symfony/http-kernel (v2.6.9)                                                                                                                                              
                                                                                                                                                                                         
  - Installing symfony/finder (v2.6.9)                                                                                                                                                   
                                                                                                                                                                                         
  - Installing symfony/console (v2.6.9)                                                                                                                                                  
                                                                                                                                                                                         
  - Installing swiftmailer/swiftmailer (v5.4.0)                                                                                                                                          
                                                                                                                                                                                         
  - Installing jakub-onderka/php-console-color (0.1)                                                                                                                                     
                                                                                                                                                                                         
  - Installing jakub-onderka/php-console-highlighter (v0.3.1)                                                                                                                            
                                                                                                                                                                                         
  - Installing dnoegel/php-xdg-base-dir (0.1)                                                                                                                                            
                                                                                                                                                                                         
  - Installing nikic/php-parser (v1.3.0)                                                                                                                                                 
                                                                                                                                                                                         
  - Installing psy/psysh (v0.4.4)                                                                                                                                                        
                                                                                                                                                                                         
  - Installing nesbot/carbon (1.19.0)                                                                                                                                                    
                                                                                                                                                                                         
  - Installing mtdowling/cron-expression (v1.0.4)                                                                                                                                        
                                                                                                                                                                                         
  - Installing monolog/monolog (1.13.1)                                                                                                                                                  
                                                                                                                                                                                         
  - Installing league/flysystem (1.0.3)                                                                                                                                                  
                                                                                                                                                                                         
  - Installing jeremeamia/SuperClosure (2.1.0)                                                                                                                                                                                          
  - Installing ircmaxell/password-compat (v1.0.4)                                                                                                                                        
                                                                                                                                                                                         
  - Installing doctrine/inflector (v1.0.1)                                                                                                                                               
                                                                                                                                                                                         
  - Installing danielstjules/stringy (1.9.0)                                                                                                                                             
                                                                                                                                                                                         
  - Installing symfony/filesystem (v2.7.0)                                                                                                                                               
                                                                                                                                                                                         
  - Installing classpreloader/classpreloader (1.4.0)                                                                                                                                     
                                                                                                                                                                                         
  - Installing laravel/framework (v5.0.32)                                                                                                                                               
                                                                                                                                                                                         
  - Installing sebastian/version (1.0.5)                                                                                                                                                 
                                                                                                                                                                                         
  - Installing sebastian/global-state (1.0.0)                                                                                                                                            
                                                                                                                                                                                         
  - Installing sebastian/recursion-context (1.0.0)                                                                                                                                       
                                                                                                                                                                                         
  - Installing sebastian/exporter (1.2.0)                                                                                                                                                
                                                                                                                                                                                         
  - Installing sebastian/environment (1.2.2)                                                                                                                                             
                                                                                                                                                                                         
  - Installing sebastian/diff (1.3.0)                                                                                                                                                    
                                                                                                                                                                                         
  - Installing sebastian/comparator (1.1.1)                                                                                                                                              
                                                                                                                                                                                         
  - Installing symfony/yaml (v2.7.0)                                                                                                                                                     
                                                                                                                                                                                         
  - Installing doctrine/instantiator (1.0.4)                                                                                                                                             
                                                                                                                                                                                         
  - Installing phpdocumentor/reflection-docblock (2.0.4)                                                                                                                                 
                                                                                                                                                                                         
  - Installing phpspec/prophecy (v1.4.1)                                                                                                                                                                                         
  - Installing phpunit/php-text-template (1.2.0)                                                                                                                                         
                                                                                                                                                                                         
  - Installing phpunit/phpunit-mock-objects (2.3.3)                                                                                                                                      
                                                                                                                                                                                         
  - Installing phpunit/php-timer (1.0.5)                                                                                                                                                 
                                                                                                                                                                                         
  - Installing phpunit/php-token-stream (1.4.1)                                                                                                                                          
                                                                                                                                                                                         
  - Installing phpunit/php-file-iterator (1.4.0)                                                                                                                                         
                                                                                                                                                                                         
  - Installing phpunit/php-code-coverage (2.1.3)                                                                                                                                         
                                                                                                                                                                                         
  - Installing phpunit/phpunit (4.7.0)                                                                                                                                                   
                                                                                                                                                                                         
  - Installing phpspec/php-diff (v1.0.2)                                                                                                                                                 
                                                                                                                                                                                         
  - Installing phpspec/phpspec (2.2.1)                                                                                                                                                   
                                                                                                                                                                                         
symfony/var-dumper suggests installing ext-symfony_debug ()                                                                                                                              
symfony/translation suggests installing symfony/config ()                                                                                                                                
symfony/security-core suggests installing symfony/validator (For using the user password constraint)                                                                                     
symfony/security-core suggests installing symfony/expression-language (For using the expression voter)                                                                                   
symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader)                                                                                       
symfony/routing suggests installing symfony/expression-language (For using expression matching)                                                                                          
symfony/routing suggests installing doctrine/annotations (For using the annotation loader)                                                                                               
symfony/event-dispatcher suggests installing symfony/dependency-injection ()                                                                                                             
symfony/http-kernel suggests installing symfony/browser-kit ()                                                                                                                           
symfony/http-kernel suggests installing symfony/class-loader ()                                                                                                                          
symfony/http-kernel suggests installing symfony/config ()                                                                                                                                
symfony/http-kernel suggests installing symfony/dependency-injection ()                                                                                                                  
psy/psysh suggests installing ext-posix (If you have PCNTL, you'll want the POSIX extension as well.)                                                                                    
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)                                                                                                  
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server) 
monolog/monolog suggests installing raven/raven (Allow sending log messages to a Sentry server)                                                                                          
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)                                                                                    
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)                                                                             
monolog/monolog suggests installing videlalvaro/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)                                                             
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))                                                                              
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)                                                                                           
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)                                                                           
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)                                                                                              
league/flysystem suggests installing predis/predis (Allows you to use Predis for caching)                                                                                                
league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem)                                                                       
league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files)                                                                                
league/flysystem suggests installing league/flysystem-copy (Allows you to use Copy.com storage)                                                                                          
league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage)                                                                               
league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage)                                                                                          
league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2)                                                                           
league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3)                                                                           
league/flysystem suggests installing league/flysystem-dropbox (Allows you to use Dropbox storage)                                                                                        
league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching)                                                                  
league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib)                                                                         
league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter)                                                                                  
laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver and SES mail driver (~2.4).)                                                                 
laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (~2.4).)                                                                         
laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers (~5.0).)                                                                  
laravel/framework suggests installing iron-io/iron_mq (Required to use the iron queue driver (~1.5).)                                                                                    
laravel/framework suggests installing league/flysystem-aws-s3-v2 (Required to use the Flysystem S3 driver (~1.0).)                                                                       
laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (~1.0).)                                                                
laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (~3.0).)                                                                                
laravel/framework suggests installing predis/predis (Required to use the redis cache and queue drivers (~1.0).)                                                                          
sebastian/global-state suggests installing ext-uopz (*)                                                                                                                                  
phpdocumentor/reflection-docblock suggests installing dflydev/markdown (~1.0)                                                                                                            
phpdocumentor/reflection-docblock suggests installing erusev/parsedown (~1.0)                                                                                                            
phpunit/phpunit-mock-objects suggests installing ext-soap (*)                                                                                                                            
phpunit/php-code-coverage suggests installing ext-xdebug (>=2.2.1)                                                                                                                       
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)                                                                                                                           
phpspec/phpspec suggests installing phpspec/nyan-formatters (~1.0 – Adds Nyan formatters)                                                                                                

實際上larave/laravel只是一個當你建立一個新專案時你得到的應用框架,比如使用命令:

composer create-project laravel/laravel --prefer-dist

注意: composer create-project命令從功能上來說等於 git clone laravel/laravel和一個composer install命令

那麼composer是如何知道一個package的repo地址的呢?

http://grossi.io/2013/creating-your-first-composer-packagist-package/

laravel/laravel實際上是一個當你建立一個新專案時所需要的應用框架skeleton.她提供一個推薦的預設檔案結構(你當然可以不用這個檔案結構哦)。這個repo包含預設的config files,controllers,routes等,同時包含用於bootstraping應用的程式碼。

她也包含一個composer.json檔案,這個檔案定義了實際的laravel framework作為laravel/laravel的dependency:

"require": {
    "laravel/framework": "5.0.*"
},

laravel/framework是實際的framework source。正如framework的repo中的readme.md所說“這個repo包含了laravel fraemworkd的core code(實際上就是一些類庫),如果你希望使用laravel 5來構建一個應用,請訪問laravel/laravel repo”,也就是說可以理解laravel/framework本身就是一個component,可以被laravel/laravel來使用(提供bootstrap應用,將laravel/framework各個元件組合在一起最終形成一個application),當然也可以在其他的應用中以一個獨立的component來使用。

另外一個說法也對理解他們之間的關係有所幫助:

laravel/laravel is the part of the app that you work with yourself(controllers,config,routes.php,resources,database etc)while laravel/framework is the "core" of laravel, stuff that you don't change.

laravel/laravel is the application template/skeleton, and is the starting point for laravel apps. Laravel/framework is the kernel, which contains the actual framework components itself, and is downloaded by composer into your application template/skeleton.

參考以下文章:

http://grossi.io/2013/creating-your-first-composer-packagist-package/

 

相關文章