Composer - daniel-qa/Laradock GitHub Wiki

https://www.runoob.com/w3cnote/composer-install-and-usage.html

  • 進入容器中的程式資料夾,有 composer.json 的資料夾

執行下列指令

composer install

composer update
  • 檢查
composer -V
  • composer install,update 說明
* 当运行 composer install 时,Composer 使用 composer.lock 来安装确切的依赖版本,以确保环境的一致性。

* 如果没有 composer.lock 文件,它将根据 composer.json 安装依赖,然后生成一个新的 composer.lock 文件。

* 当运行 composer update 时,Composer 会忽略 composer.lock,
  并根据 composer.json 中的版本限制更新依赖包到最新的兼容版本。

总之,composer.json 用于定义依赖和要求,而 composer.lock 用于记录实际安装的依赖的确切版本,以确保项目的稳定性和一致性。

通常情况下,你不应手动编辑 composer.lock 文件,而应该通过修改 composer.json 文件来管理依赖的版本要求。
  • npm run dev , watch
npm run dev 用于手动构建前端资源,通常用于开发环境的初始化构建,
而 npm run watch 用于在开发过程中实时监视文件更改并自动重新构建资源,以便快速查看和调试效果。

通常,你在开发期间会使用 npm run watch 以提高开发效率。

  • npm install

依據 package.json 安裝js套件,產生 node_modules 資料夾

並產生 package-lock.json

npm install 是一个用于安装 JavaScript 包和依赖项的 npm 命令。

通常,它用于在项目目录中安装在项目的 package.json 文件中列出的所有依赖项。

具体来说,运行 npm install 将执行以下操作:

打开项目目录中的 package.json 文件,查找其中列出的依赖项和其版本要求。

使用 npm(Node Package Manager)来下载并安装这些依赖项。
npm将自动下载依赖包并将它们保存在项目目录的 node_modules 文件夹中。

安装过程中,npm还会生成一个 package-lock.json 文件,其中包含了确切安装的依赖项的详细信息,
以确保项目在不同环境下拥有相同的依赖版本。

  • npm install, update
npm install 用于安装项目的依赖包,而 npm update 用于更新这些包到它们的最新版本。
通常情况下,你在设置新项目或添加新依赖时会使用 npm install,而在需要更新依赖版本时使用 npm update。

Composer管理相依性 #

  • 設定相依性

在專案中使用composer時,首先要產生一個composer.json檔,裡面指定要使用的套件與版本。例如需要用phpmailer來寄信時,可以這樣指定:

{
	"require": {
		"phpmailer/phpmailer": "~5.2.7"
	}
}

然後執行安裝:

eng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing phpmailer/phpmailer (v5.2.7)
    Downloading: 100%         

Writing lock file
Generating autoload files
Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$

這樣就安裝好了。看一看到底裝了什麼:

Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ ls -l
total 16
-rw-r--r--  1 fillano  staff    66 10 11 18:15 composer.json
-rw-r--r--  1 fillano  staff  2330 10 11 18:16 composer.lock
drwxr-xr-x  5 fillano  staff   170 10 11 18:16 vendor

根據目錄中的檔案可以發現,本來只有composer.json檔案,安裝之後多了一個composer.lock檔案以及vendor目錄。先看一下composer.lock的內容:

Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ cat composer.lock
{
    "_readme": [
        "This file locks the dependencies of your project to a known state",
        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
    ],
    "hash": "065c23f92d5ae579cb91beff67f41196",
    "packages": [
        {
            "name": "phpmailer/phpmailer",
            "version": "v5.2.7",
            "source": {
                "type": "git",
                "url": "https://github.com/PHPMailer/PHPMailer.git",
                "reference": "8717a79565b2c0ed67f851d70e1949febdf3b226"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/8717a79565b2c0ed67f851d70e1949febdf3b226",
                "reference": "8717a79565b2c0ed67f851d70e1949febdf3b226",
                "shasum": ""
            },
            "require": {
                "php": ">=5.0.0"
            },
            "require-dev": {
                "phpdocumentor/phpdocumentor": "*",
                "phpunit/phpunit": "*"
            },
            "type": "library",
            "autoload": {
                "classmap": [
                    "class.phpmailer.php",
                    "class.pop3.php",
                    "class.smtp.php"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-2.1"
            ],
            "authors": [
....下略

看起來是剛剛安裝套件的資訊。

再看一下 vendor 目錄有什麼東西:

Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ tree vendor
vendor
├── autoload.php
├── composer
│   ├── ClassLoader.php
│   ├── autoload_classmap.php
│   ├── autoload_namespaces.php
│   ├── autoload_real.php
│   └── installed.json
└── phpmailer
    └── phpmailer
        ├── LICENSE
        ├── PHPMailerAutoload.php
        ├── README.md
        ├── changelog.md
        ├── class.phpmailer.php
        ├── class.pop3.php
        ├── class.smtp.php
        ├── composer.json
        ├── docs
        │   ├── Callback_function_notes.txt
        │   ├── DomainKeys_notes.txt
        │   ├── Note_for_SMTP_debugging.txt
        │   ├── extending.html
        │   ├── faq.html
        │   ├── generatedocs.sh
        │   └── pop3_article.txt
...下略

看起來除了 phpmailer目錄安裝了phpmailer在裡面之外,主要還有 autoload.php檔案以及composer目錄

原來要載入透過composer安裝的套件,需要先引用vendor/autoload.php檔案,然後就可以使用phpmailer。寫一個簡單的程式測試一下:

<?php
require 'vendor/autoload.php';
$phpmailer = new PHPMailer;

執行以後沒有出錯,表示phpmailer可以正常載入...接下來就看一下這幾個檔案的用途。

  • composer.json
對使用者來說,這個檔案主要是用來維護相依性。只要在檔案中的"require"屬性中加入一個物件,屬性名稱是套件名稱,值就是版本。
套件名稱分成兩個部分,第一個部分是vendor,第二個部分才是實際套件名稱,使用"\"隔開。版本有幾種規則:

直接指定版號,例如2.7.3
指定主版號之後,使用"*"指定次版號,例如2.7.*表示版號大於等於2.7.0,小於2.8.0的版本
使用>、>=、!=、<=、<等在版號前,表示使用這些比較運算子來指定版號規則,可以使用多個規則並用","分開
使用"~"在版號前,表示下一個版號變動之前的版本。例如~2.7,表示版本大於等於2.7,小於3.0
在版號之後,還可以加上不同的stability flag,例如2.7.*@beta。可以使用的flag有:dev、alpha、beta、RC、stable
指定好版本後,執行composer install,就會根據指定的版本規則,安裝最新版本的套件。

實際上每個有composer.json檔案的目錄,也是一個套件的根目錄。
不過如果是要做成給別人使用的套件,還需要加上許多設定,這些就不在討論範圍內了。
  • composer.lock
在首次安裝套件完畢後,會產生這個檔案,裡面記錄了所安裝套件的資訊。
這個檔案的真正作用是:如果目錄中有這個檔案,執行安裝時,就不會去搜尋更新的版本,
而是依照這個檔案中記錄的版本來安裝。這個設計很重要,因為新版的套件很有可能與目前使用的版本不相容,如果不是使用同樣版本,
很難保證系統的穩定。過去在使用pear來管理套件時,如果不注意,就有可能發生升級導致的慘劇。

除此之外,只要把這個檔案加入版本管理,所有開發者目錄中也都會有這個檔案,
所以大家使用的套件版本也都會是一致的,這樣可以減少開發時,使用套件版本不一導致的程式相容問題。
  • vendor目錄
所有套件都會放置在這個目錄,並且依照<vendor name>/<package name>的目錄結構來組織。
  • vendor/autoload.php
只要引用這個檔案,就可以載入套件中所有對外公開的類別。
基本上每個套件都會定義自己的 autoload 規則,在安裝時,composer會把這些規則加入,
這樣透過autoload.php就可以直接使用所有已安裝的類別。
=====

從這些地方可以看到,Composer這個套件管理工具,在設計上已經做了很周密的考量,
只需要簡單指定要使用的套件及版本,一個指令就可以安裝完畢,
引用一個膽案之後就能使用,這樣真的非常方便。
所以目前幾乎所有的程式庫以及Framework,應該都逐漸在套用這個工具了。
未來在開發PHP程式,恐怕最基本的工具也就是composer。

Composer 安装与使用

分类 编程技术

Composer 是 PHP 的一个依赖管理工具。我们可以在项目中声明所依赖的外部工具库,

Composer 会帮你安装这些依赖的库文件,有了它,我们就可以很轻松的使用一个命令将其他人的优秀代码引用到我们的项目中来。

Composer 默认情况下不是全局安装,而是基于指定的项目的某个目录中(例如 vendor)进行安装。

Composer 需要 PHP 5.3.2+ 以上版本,且需要开启 openssl。

  • composer --version 命令来查看是否安装成功: