Jadual Kandungan
下载安装composer
关于composer.json文件
基本用法
自动加载
Rumah alat pembangunan composer composer的一些学习和理解

composer的一些学习和理解

Apr 23, 2021 pm 04:06 PM
composer laravel php

关于composer一些学习和理解

Composer 不是一个包管理器。是的,它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。

这种想法并不新鲜,Composer 受到了 node's npm 和 ruby's bundler 的强烈启发。而当时 PHP 下并没有类似的工具。

Composer 将这样为你解决问题:

  • 你有一个项目依赖于若干个库。

  • 其中一些库依赖于其他库。

  • 你声明你所依赖的东西。

  • Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。

因为laravel是使用composer管理的,所以一切以laravel为基础。

下载安装composer

这里补充的是:

  1. 因为某些原因,访问国外的composer资源网站很慢,导致composer install或者update的时候经常连接超时而出错,所以改为中国镜像

    全局:
    composer config -g repo.packagist composer https://packagist.phpcomposer.com
    
    局部项目(需要在项目当前目录下执行):
    composer config repo.packagist composer https://packagist.phpcomposer.com
Salin selepas log masuk

执行完命令后会在composer.json文件里面增加这段,这样就代表添加中国镜像成功了,以后执行composer install或者update之类的命令的时候就会优先使用这个镜像

    "repositories": {
      "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
      }
    }
Salin selepas log masuk

composer selfupdate来保持composer工具本身的版本更新

关于composer.json文件

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {  //这里是告诉composer必须要安装的项目,相当于生产环境
        "php": ">=5.5.9",
        "laravel/framework": "5.2.*",  //require 需要一个 包名称,这个就是包名称
        "laravelcollective/html": "5.2.*",
        "yuanchao/laravel-5-markdown-editor": "dev-master"
    },
    "require-dev": {  //这个是开发需要安装的项目,相当于开发环境,可以通过-no-dev来取消安装这个项目里面的包
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~4.0",
        "symfony/css-selector": "2.8.*|3.0.*",
        "symfony/dom-crawler": "2.8.*|3.0.*"
    },
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "classmap": [
            "tests/TestCase.php"
        ]
    },
    "scripts": {
        "post-root-package-install": [
            "php -r \"copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ],
        "post-install-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postInstall",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postUpdate",
            "php artisan optimize"
        ]
    },
    "config": {
        "preferred-install": "dist"
    }
}
Salin selepas log masuk

包名称的版本

确切的版本号--------1.0.2---------你可以指定包的确切版本。

范围-------->=1.0 >=1.0,<2.0 >=1.0,<1.1|>=1.2--------通过使用比较操作符可以指定有效的版本范围。 有效的运算符:>、>=、<、<=、!=。你可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号|将作为逻辑OR处理。 AND 的优先级高于 OR。

通配符--------1.0.*--------你可以使用通配符*来指定一种模式。1.0.*与>=1.0,<1.1是等效的。

赋值运算符--------~1.2--------这对于遵循语义化版本号的项目非常有用。~1.2相当于>=1.2,<2.0。
Salin selepas log masuk

我们需要重点关注通配符和波浪符,通配符很好理解,波浪符有点拗口,~ 最好用例子来解释: ~1.2 相当于 >=1.2,<2.0(标记你所依赖的最低版本),而 ~1.2.3 相当于 >=1.2.3,<1.3。(指定最低版本,但允许版本号的最后一位数字上升。)语义化很难懂,但是直接看例子是可以知道怎么用的<h2 id="基本用法">基本用法</h2><p>composer是通过读取composer.json和composer.lock文件来进行安装包的</p><p>在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock 文件。这将锁定改项目的特定版本。<code>因为 install 命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略 composer.json 文件中的定义)。如果不存在 composer.lock 文件,Composer 将读取 composer.json 并创建锁文件。

一般的使用用法有:

  1. composer install  (install 命令从当前目录读取 composer.json 文件,处理了依赖关系,并把其安装到 vendor 目录下。)

  2. composer install XXXX  (这是单独安装某些包的时候使用)

  3. composer update (为了获取依赖的最新版本,并且升级 composer.lock 文件,)

  4. composer update XXX (类似)

    --prefer-source: 下载包的方式有两种: source 和 dist。对于稳定版本 composer 将默认使用 dist 方式。而 source 表示版本控制源 。如果 --prefer-source 是被启用的,composer 将从 source 安装(如果有的话)。如果想要使用一个 bugfix 到你的项目,这是非常有用的。并且可以直接从本地的版本库直接获取依赖关系。
    --prefer-dist: 与 --prefer-source 相反,composer 将尽可能的从 dist 获取,这将大幅度的加快在 build servers 上的安装。这也是一个回避 git 问题的途径,如果你不清楚如何正确的设置。
    --dry-run: 如果你只是想演示而并非实际安装一个包,你可以运行 --dry-run 命令,它将模拟安装并显示将会发生什么。
    --dev: 安装 require-dev 字段中列出的包(这是一个默认值)。
    --no-dev: 跳过 require-dev 字段中列出的包。
    --no-scripts: 跳过 composer.json 文件中定义的脚本。
    --no-plugins: 关闭 plugins。
    --no-progress: 移除进度信息,这可以避免一些不处理换行的终端或脚本出现混乱的显示。
    --optimize-autoloader (-o): 转换 PSR-0/4 autoloading 到 classmap 可以获得更快的加载支持。特别是在生产环境下建议这么做,但由于运行需要一些时间,因此并没有作为默认值。
    Salin selepas log masuk
  5. composer require(require 命令增加新的依赖包到当前目录的 composer.json 文件中。但并不即可更新)

  6. composer dump-autoload(某些情况下你需要更新 autoloader,例如在你的包中加入了一个新的类。)

自动加载

composer的自动加载会生产这个文件vendor/autoload.php,然后调用这个文件就能够获得文件里面的类的自动加载

自动加载只支持 PSR-4和 PSR-0两种命名方式

Under the psr-4 key you define a mapping from namespaces to paths, relative to the package root. 

{
    "autoload": {
        "psr-4": {
            "Monolog\\": "src/",  //这里写法其实差不多,但是展现的意义并不相同,psr4会设定一个命名空间作为包的根目录,举例这行的意思是src/目录映射成为Monolog\\根目录,那么调用这个包的时候写Monolog\Bar\Baz,其实自动加载就会去这里src/Bar/Baz.php找类文件,然后加载
            "Vendor\\Namespace\\": ""
        }
    }
}

在 psr-0 key 下你定义了一个命名空间到实际路径的映射(相对于包的根目录)
{
    "autoload": {
        "psr-0": {
            "Monolog\\": "src/",  //这里的意思是src/目录映射为Monolog\\,如果要调用Monolog\Bar\Baz,那么自动加载就会去src/Monolog/Bar/Baz.php,然后加载
            "Vendor\\Namespace\\": "src/",
            "Vendor_Namespace_": "src/"
        }
    }
}
Salin selepas log masuk

laravel的自动加载会多了一些东西

vendor/autoload.php

<?php

// autoload.php @generated by Composer

require_once __DIR__ . '/composer' . '/autoload_real.php';  //会再次加载autoload_real.php这个文件,然后获取getLoader,不过总的过程是一样的。

return ComposerAutoloaderInitf1f9a2cafe15aa5cd52ec13394a5f5fb::getLoader();
Salin selepas log masuk

引用参考:

  1. http://docs.phpcomposer.com/00-intro.html

  2. https://getcomposer.org/doc/00-intro.md


Atas ialah kandungan terperinci composer的一些学习和理解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Contoh Pengenalan Laravel Contoh Pengenalan Laravel Apr 18, 2025 pm 12:45 PM

Laravel adalah rangka kerja PHP untuk membina aplikasi web yang mudah. Ia menyediakan pelbagai ciri yang kuat termasuk: Pemasangan: Pasang Laravel CLI secara global dengan komposer dan buat aplikasi dalam direktori projek. Routing: Tentukan hubungan antara URL dan pengendali dalam laluan/web.php. Lihat: Buat pandangan dalam sumber/pandangan untuk menjadikan antara muka aplikasi. Integrasi Pangkalan Data: Menyediakan integrasi keluar-of-the-box dengan pangkalan data seperti MySQL dan menggunakan penghijrahan untuk membuat dan mengubah suai jadual. Model dan Pengawal: Model mewakili entiti pangkalan data dan proses pengawal permintaan HTTP.

Selesaikan masalah caching dalam kraf CMS: Menggunakan plug-in wiejeben/craft-laravel-mix Selesaikan masalah caching dalam kraf CMS: Menggunakan plug-in wiejeben/craft-laravel-mix Apr 18, 2025 am 09:24 AM

Apabila membangunkan laman web yang menggunakan CraftCMS, anda sering menghadapi masalah caching fail sumber, terutamanya apabila anda sering mengemas kini fail CSS dan JavaScript, versi lama fail mungkin masih di -cache oleh penyemak imbas, menyebabkan pengguna tidak melihat perubahan terkini dalam masa. Masalah ini bukan sahaja memberi kesan kepada pengalaman pengguna, tetapi juga meningkatkan kesukaran pembangunan dan debugging. Baru-baru ini, saya menghadapi masalah yang sama dalam projek saya, dan selepas beberapa penjelajahan, saya dapati plugin Wiejeben/Craft-Laravel-Mix, yang sempurna menyelesaikan masalah caching saya.

Cara Belajar Laravel Cara Belajar Laravel secara percuma Cara Belajar Laravel Cara Belajar Laravel secara percuma Apr 18, 2025 pm 12:51 PM

Mahu mempelajari rangka kerja Laravel, tetapi tidak mengalami sumber atau tekanan ekonomi? Artikel ini memberikan anda pembelajaran percuma Laravel, mengajar anda cara menggunakan sumber seperti platform dalam talian, dokumen dan forum komuniti untuk meletakkan asas yang kukuh untuk perjalanan pembangunan PHP anda dari mula menguasai.

Meningkatkan kecekapan siri entiti doktrin: Penggunaan Sidus/Doktrin-Serializer-Bundle Meningkatkan kecekapan siri entiti doktrin: Penggunaan Sidus/Doktrin-Serializer-Bundle Apr 18, 2025 am 11:42 AM

Saya mempunyai masalah yang sukar apabila mengerjakan projek dengan sejumlah besar entiti doktrin: Setiap kali entiti bersiri dan deserialized, prestasi menjadi sangat tidak cekap, mengakibatkan peningkatan yang signifikan dalam masa tindak balas sistem. Saya telah mencuba pelbagai kaedah pengoptimuman, tetapi ia tidak berfungsi dengan baik. Nasib baik, dengan menggunakan Sidus/Doctrine-Serializer-Bundle, saya berjaya menyelesaikan masalah ini, dengan ketara meningkatkan prestasi projek.

Cara Cepat Membangun Templat Projek Lanjutan Fecmall Menggunakan Komposer Cara Cepat Membangun Templat Projek Lanjutan Fecmall Menggunakan Komposer Apr 18, 2025 am 11:45 AM

Apabila membangunkan platform e-dagang, adalah penting untuk memilih rangka kerja dan alat yang betul. Baru-baru ini, ketika saya cuba membina laman web e-dagang yang kaya dengan ciri-ciri, saya menghadapi masalah yang sukar: bagaimana dengan cepat membina platform e-dagang yang berskala dan berfungsi sepenuhnya. Saya mencuba pelbagai penyelesaian dan akhirnya memilih template projek lanjutan FECMALL (FECMALL/FBBCBASE-APP-Advanced). Dengan menggunakan komposer, proses ini menjadi sangat mudah dan cekap. Komposer dapat dipelajari melalui alamat berikut: Alamat Pembelajaran

Gunakan komposer untuk menyelesaikan dilema sistem cadangan: Andres-Montanez/Cadangan-Bundle Gunakan komposer untuk menyelesaikan dilema sistem cadangan: Andres-Montanez/Cadangan-Bundle Apr 18, 2025 am 11:48 AM

Apabila membangunkan laman web e-dagang, saya menghadapi masalah yang sukar: bagaimana menyediakan pengguna dengan cadangan produk yang diperibadikan. Pada mulanya, saya mencuba beberapa algoritma cadangan mudah, tetapi hasilnya tidak sesuai, dan kepuasan pengguna juga terjejas. Untuk meningkatkan ketepatan dan kecekapan sistem cadangan, saya memutuskan untuk menggunakan penyelesaian yang lebih profesional. Akhirnya, saya memasang Andres-Montanez/Cadangan-Bundle melalui komposer, yang bukan sahaja menyelesaikan masalah saya, tetapi juga meningkatkan prestasi sistem cadangan. Anda boleh belajar komposer melalui alamat berikut:

Apr 18, 2025 am 11:27 AM

Saya menghadapi masalah yang rumit ketika melakukan kempen pemasaran mel: bagaimana untuk membuat dan menghantar surat dengan cekap dalam format HTML. Pendekatan tradisional adalah untuk menulis kod secara manual dan menghantar e-mel menggunakan pelayan SMTP, tetapi ini bukan sahaja memakan masa, tetapi juga rawan ralat. Selepas mencuba pelbagai penyelesaian, saya dapati Duwa.io, sebuah Restapi yang mudah dan mudah digunakan yang membantu saya membuat dan menghantar surat HTML dengan cepat. Untuk memudahkan proses pembangunan, saya memutuskan untuk menggunakan komposer untuk memasang dan mengurus perpustakaan PHP Duwa.io - Captaindoe/Duwa.

Fungsi log masuk pengguna laravel Fungsi log masuk pengguna laravel Apr 18, 2025 pm 12:48 PM

Laravel menyediakan rangka kerja auth yang komprehensif untuk melaksanakan fungsi log masuk pengguna, termasuk: Menentukan model pengguna (model fasih), membuat borang log masuk (enjin templat bilah), menulis pengawal log masuk (mewarisi auth \ logincontroller) tajuk keselamatan. Di samping itu, rangka kerja AUTH juga menyediakan fungsi seperti menetapkan semula kata laluan, mendaftar dan mengesahkan e -mel. Untuk maklumat lanjut, sila rujuk dokumentasi Laravel: https://laravel.com/doc

See all articles