WWW.lllT.neT

有关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 http://www.lllt.net/img/20211203/k341ilqthp3
    部分新项目(必须在新项目当前目录下实行):
    composer config repo.packagist composer http://www.lllt.net/img/20211203/k341ilqthp3

实行完指令之后在composer.json文档里边提升这一段,那样就意味着加上我国镜像文件成功了,之后执行composer install或是update这类的指令的情况下便会优先选择应用这一镜像文件

    "repositories": {
      "packagist": {
        "type": "composer",
        "url": "http://www.lllt.net/img/20211203/k341ilqthp3"
      }
    }

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"
    }
}

包名字的版本号

准确的版本信息--------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。

大家必须重点关注使用通配符和波浪纹符,使用通配符非常好了解,波浪纹符有点儿拗口,~ 最好用事例来表述: ~1.2 等同于 >=1.2,<2.0(标识你所依靠的最少版本号),而 ~1.2.3 等同于 >=1.2.3,<1.3。(特定最少版本号,但容许版本信息的最终一位数据升高。)词义化很晦涩难懂,可是直接看事例是可以了解如何使用的

基本上使用方法

composer是根据载入composer.json和composer.lock文档来开展安装文件的

在组装依靠后,Composer 将把组装时准确的版本信息目录载入 composer.lock 文档。这将锁住改新项目的特殊版本号。由于 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 可以得到迅速的载入适用。尤其工作环境下提议那么做,但因为运作必须一些時间,因而并沒有做为初始值。
  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\网站根目录,那麼读取这一包的那时候写MonologBarBaz,实际上全自动载入便会去这儿src/Bar/Baz.php找类文档,随后载入
            "Vendor\Namespace\": ""
        }
    }
}

在 psr-0 key 下你界定了一个类名到具体途径的投射(相对性于包的网站根目录)
{
    "autoload": {
        "psr-0": {
            "Monolog\": "src/",  //这儿的意思是src/文件目录投射为Monolog\,假如要读取MonologBarBaz,那麼全自动载入便会去src/Monolog/Bar/Baz.php,随后载入
            "Vendor\Namespace\": "src/",
            "Vendor_Namespace_": "src/"
        }
    }
}

laravel的全自动载入会多了一些物品

vendor/autoload.php

<?php

// autoload.php @generated by Composer

require_once ._DIR._ . '/composer' . '/autoload_real.php';  //会再度载入autoload_real.php这一文档,随后获得getLoader,但是总的操作过程是一样的。

return ComposerAutoloaderInitf1f9a2cafe15aa5cd52ec13394a5f5fb::getLoader();

引入参照:

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

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

以上便是composer的一些练习和了解的详尽具体内容,大量请关心自学java网其他相关文章!

WWW.lllT.neT
标签: 工具使用
下载本文:composer的一些练习和了解.doc

声明:有的资源来自网络转载,版权归原作者所有,如有侵犯到您的权益请联系邮箱:our333@126.com我们将配合处理!

原文地址:composer的一些练习和了解发布于2021-12-15 19:45:01

相关推荐