Giter Club home page Giter Club logo

composertutorial's Introduction

Composer 新手入門教學

安裝 Composer

       ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.5.1 2017-08-09 16:07:22

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display this help message
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi                     Force ANSI output
      --no-ansi                  Disable ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
      --no-plugins               Whether to disable plugins.
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

  # 後略...
  • 看到一般 github 上寫例如: $ composer require mike182uk/cart 就是要執行 $ php composer.phar require mike182uk/cart 再例如要你執行: $ composer install 就是要執行 $ php composer.phar install

  • 但一般來說,都會把 composer.phar 改名為 composer 變成一個可執行檔, 複製到系統 path 中可以讀得到的路徑上, 以 Mac 為例: cp comopser.phar /usr/local/bin/composer 這樣以後就只要執行 composer 不用再打一長串了。

  • Windows 的話應該會製成 composer.bat 檔,複製到系統 path 中可以讀得到的路徑上,內容會類似是 php.exe composer.phar %1 %2 %3 %4 %5 之類的。可參考我搜尋到的一個 gist:https://gist.github.com/JCook21/1752267 (沒試用過,有誰試過能用麻煩跟我說一聲,感謝!)

  • 附註:以前使用 curl 的安裝的方式在 mac 環境仍然能用, 我想應該是因為在 windows 上沒有 curl 這個工具,所以官網才改的。 下這行指令,效果也一樣會下載 composer.phar 檔: curl -sS https://getcomposer.org/installer | php




Composer Require 安裝/引用 package(套件)

引用購物車 package,執行:$ composer require mike182uk/cart

怎麼使用下載的套件?

  • 在 php 中加入:
    <?php
    require __DIR__ . '/vendor/autoload.php
    
    // ...
    
  • 看套件的 readme.md 看怎麼用,如果沒有,就只好自己看原始碼了。

使用套件的 Live Demo

  • 建立 Cart instance
  • 加入 CartItem
  • 計算 Totol amount

Composer Require 做了什麼?

- 會下載 `mike182uk/cart` 到 `vendor` 資料夾
- 如果當時沒有 `composer.lock`,執行完會建立 `composer.lock`。



Composer Install 安裝 package(套件)

composer.json 設定檔,用來「限制」更新/安裝套件的版本

  • composer.json 是 Composer 重要設定檔,最重要的功能就是用來「限制」更新套件的版本。功能類似 package.json, bower.json
  • 執行 $ composer install 時,如果找不到 composer.lock 檔,則依 compsoer.json 檔內容安裝套件。
  • 其他還有很多功能,這邊先不混淆大家,怎麼「限制」版本到後面 composer update 再聊。

composer.lock 用來「鎖定」安裝的套件和套件版本

  • 用來「鎖定」安裝的套件及版本,在執行 $ composer update$ composer require 時會改變其內容。 是 $ composer install 優先讀取的設定檔。
  • 執行 $ composer install 「不會」改變 composer.lock 檔的內容。

1. 要用 composer install 安裝套件,需要先有 composer.jsoncomposer.lock

以空專案為例,先自己新增一個 composer.json 檔,或是從同事的 repo 得來等等,例如:

{
    "require": {
        "mike182uk/cart": "^3.0"
    }
}

2. 執行 $ composer install

- 讀取 json 設定檔,會下載 `mike182uk/cart` 套件到 `vendor/` 資料夾
- 在這 json 檔的例子裡,效果跟 `$ composer require mike182uk/cart` 結果一樣
- 根據 `require` / `require-dev` 的設定限制安裝套件的版本
- 版本限制一般是用 git repo 的 tag
- 如果不想裝 `requrie-dev` 中的東西,可以改用 `$ composer install --no-dev`
- 如果當時沒有 `composer.lock`,執行完會建立 `composer.lock`。
  • 來看個比較複雜的例子,拿這次用的 mike182uk/cart 套件裡的 composer.json 為例:
{
  "name": "mike182uk/cart",
  "description" : "A flexible and modern shopping cart package",
  "type": "library",
  "license": "MIT",
  "authors": [
    {
      "name": "Michael David Barrett",
      "email": "[email protected]"
    }
  ],
  "require" : {
    "php": ">=5.6.0"
  },
  "require-dev": {
    "phpunit/phpunit": "~5.0",
    "mockery/mockery": "~0.0",
    "friendsofphp/php-cs-fixer": "~2.0"
  },
  "autoload": {
    "psr-4": {
      "Cart\\": "src"
    }
  },
  "scripts": {
    "test": "phpunit --verbose --colors=always",
    "test-with-coverage": "phpunit --verbose --colors=always --coverage-clover coverage.clover",
    "lint": "php-cs-fixer fix --dry-run --verbose --ansi",
    "fix": "php-cs-fixer fix --ansi"
  }
}

Composer Install 的重要觀念:

  • 執行 $ composer install 會讀 composer.lock 檔,依 lock 檔內容安裝套件「指定的版本」。這時候完全不會管你 composer.json 寫什麼,就算有 json 檔中有加入新的套件,也不會被裝進來。

  • 如果沒有 lock 檔,則直接讀 composer.json,依 json 檔設定的套件版本限制安裝套件。

  • 沒有 composer.json 的話無法執行 $ composer install,就算有 composer.lock 也不行。 (tested at composer v1.5.1 on 2017-09-11)




用 Composer Update 安裝/更新 package(套件)

  • 以安裝 PHPUnit 5.5 為例,$ composer require --dev phpunit/phpunit "5.5.*"
  • 裝完後,想看該套件的 Home $ composer home phpunit/phpunit
  • 或是看 github $ composer browse phpunit/phpunit
  • 移除套件 $ composer remove phpunit/phpunit

1. 要用 composer update 更新套件,需要先注意 composer.json 裡的版本限制

我們剛剛故意安裝 phpunit 5.5.* 的版本。現在要來更新到 ~5.0。所以把 composer.json 改成這樣:

{
    "require": {
        "mike182uk/cart": "^3.0"
    },
    "require-dev": {
        "phpunit/phpunit": "~5.0"
    }
}

版本限制重點整理版:

常見限制條件 版本範圍(tag)/分支名稱(branch)
3.* >= 3.0.0, < 4.0
3.1.* >= 3.1.0, < 3.2
~3.1 >= 3.1.0, < 4.0 (最常見)
~3.1.0 >= 3.1.0, < 3.2 (注意)
^3.1.0 >= 3.1.0, < 4.0 (注意)
^3.1 >= 3.1.0, < 4.0 (注意)
dev-master master branch (需搭配 minimum-stability)
dev-develop develop branch (需搭配 minimum-stability)
dev-my-feature my-feature branch (需搭配 minimum-stability)
1.0 - 2.0 >= 1.0.0, < 2.1
1.0.0 - 2.1.0 >= 1.1.0, <= 2.1.0

ref: https://blog.madewithlove.be/post/tilde-and-caret-constraints/

2. 執行 composer update 會做什麼?

{
    "require": {
        "mike182uk/cart": "^3.0"
    },
    "require-dev": {
        "phpunit/phpunit": "~5.0"
    }
}
- 讀取 `composer.json` 檔中的版本限制設定
- 下載套件到 `vendor` 資料夾,並更新 `composer.lock` 檔中鎖定的套件版本
- 以上面這個例子,會更新 phpunit 到 `< 6.0` 的最新版,目前就是 5.7.21
- 無法復原,除非把套件砍掉重裝

3. 來車拼 $ composer install vs $ composer update

Composer install Composer update
composer.json 檔 有 lock 檔先讀 lock 檔,
沒有才讀 json 檔
主要讀 json 檔
composer.lock 檔 不會更新,若沒有的話會建一個 會被更新

註:若套件沒有新版本當然 composer update 就不會更新 lock 檔

用 Composer 幫你 autoload 各 class 檔

好處與重點:

  • 只要 require 一個 autoload.php 檔,不用再一個個類別檔案 require
  • 有 files, classmap, psr-4/0 等可以選擇
  • 只有 functions 的 php 檔,必須要用 files 的方式放進 composer.json

composertutorial's People

Contributors

kenlin1020 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

markwu

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.