目次
下载安装composer
关于composer.json文件
基本用法
自动加载
ホームページ 開発ツール 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
ログイン後にコピー

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

    "repositories": {
      "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
      }
    }
ログイン後にコピー

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。(指定最低版本,但允许版本号的最后一位数字上升。)语义化很难懂,但是直接看例子是可以知道怎么用的<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 可以获得更快的加载支持。特别是在生产环境下建议这么做,但由于运行需要一些时间,因此并没有作为默认值。
    ログイン後にコピー
  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/"
        }
    }
}
ログイン後にコピー

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


以上が作曲家についてのある程度の学習と理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Composerを使用してHTTP要求の問題を解決する方法:Yiche/HTTPライブラリの実用的なガイド Composerを使用してHTTP要求の問題を解決する方法:Yiche/HTTPライブラリの実用的なガイド Apr 18, 2025 am 08:06 AM

開発中、HTTP要求が必要になることがよくあります。これは、データを取得したり、データを送信したり、外部APIと対話するためです。ただし、複雑なネットワーク環境に直面してリクエスト要件を変更すると、HTTPリクエストを効率的に処理する方法が課題になります。プロジェクトで問題に遭遇しました。リクエストを異なるAPIに頻繁に送信し、リクエストを記録して、その後のデバッグと分析を促進する必要があります。いくつかの方法を試した後、Yiche/HTTPライブラリを発見しました。 HTTP要求の処理を簡素化するだけでなく、動的ロギング機能も提供し、開発効率を大幅に改善します。

クラフトCMSのキャッシングの問題を解決する:Wiejeben/Craft-Laravel-Mixプラグインの使用 クラフトCMSのキャッシングの問題を解決する:Wiejeben/Craft-Laravel-Mixプラグインの使用 Apr 18, 2025 am 09:24 AM

CraftCMSを使用してWebサイトを開発する場合、特にCSSやJavaScriptファイルを頻繁に更新する場合、リソースファイルのキャッシュ問題が発生することがよくあります。古いバージョンのファイルがブラウザによってキャッシュされ、ユーザーが最新の変更を表示しないようにすることがあります。この問題は、ユーザーエクスペリエンスに影響を与えるだけでなく、開発とデバッグの難しさを高めます。最近、プロジェクトで同様のトラブルに遭遇し、いくつかの調査の後、プラグインWiejeben/Craft-Laravel-Mixが見つかりました。

SilverStripeのアクセシビリティの向上Webサイト:フライングフォーカスモジュールのインストールと使用 SilverStripeのアクセシビリティの向上Webサイト:フライングフォーカスモジュールのインストールと使用 Apr 18, 2025 am 08:09 AM

政府のウェブサイトプロジェクトを開発するとき、私は困難な問題に遭遇しました。特に視覚障害のあるユーザーにとって、さまざまなユーザーのニーズを満たすためにウェブサイトのアクセシビリティを改善する方法は、ウェブサイトをナビゲートして運営することは非常に困難です。複数の方法を試した後、Webサイトのアクセシビリティを大幅に向上させるFlyingFocusというJavaScriptライブラリを見つけました。ただし、SilverStripeのWebサイトに統合することは課題です。幸いなことに、FlyingFocusの統合プロセスを簡素化し、パズルを解決するDia-NZ/Silverstripe-Flying-Focusモジュールを見つけました。

作曲家を使用したJavaScriptエラー処理の問題を解決する方法 作曲家を使用したJavaScriptエラー処理の問題を解決する方法 Apr 18, 2025 am 08:30 AM

複雑なWebアプリケーションを開発する際には、JavaScriptエラーを効果的に処理してログインする方法を開発する際に、困難な問題を抱えています。私はいくつかの方法を試しましたが、このライブラリDvasilenko/Alterego_toolsを見つけるまで、それらのどれも私のニーズを満たすことができませんでした。このライブラリの設置を通じて、この問題を簡単に解決し、プロジェクトの保守性と安定性を大幅に改善しました。作曲家は次のアドレスを通して学ぶことができます:学習アドレス

Otrance翻訳プラットフォームの使用と代替案 Otrance翻訳プラットフォームの使用と代替案 Apr 18, 2025 am 08:45 AM

多くの場合、プロジェクト開発で多言語サポートが必要であり、Otranceはかつて非常に人気のあるソリューションでした。しかし、最近、Otranceプロジェクトが維持されて更新されなくなったことがわかりました。これにより、プロジェクトのニーズを満たすための新しい代替品を見つけることが余儀なくされました。幸いなことに、Composerは、代替翻訳プラットフォームを管理およびインストールする便利な方法を提供します。

Composerを使用してPHPパッケージを作成および公開する方法:実用的なケース Composerを使用してPHPパッケージを作成および公開する方法:実用的なケース Apr 18, 2025 am 11:15 AM

開発プロセス中に、他の開発者やプロジェクトが簡単に使用できるように、ライブラリに記述するコードをパッケージ化する必要があることがよくあります。最近、私はパッカギストにシンプルなPHPパッケージを公開しようとしながら、多くの課題と学習の機会に遭遇しました。この記事では、Composerを使用して「DO365/142-Composer-Hello-World」と呼ばれるPHPパッケージを作成および公開する方法と、それからの経験と利益を共有します。

MySQLモードの問題を解決する問題:TheliamySQLModescheckerモジュールの使用経験 MySQLモードの問題を解決する問題:TheliamySQLModescheckerモジュールの使用経験 Apr 18, 2025 am 08:42 AM

Theliaを使用してeコマースWebサイトを開発するとき、私はトリッキーな問題に遭遇しました:MySQLモードが適切に設定されていないため、いくつかの機能が適切に機能しません。いくつかの調査の後、TheliamysQlModescheckerというモジュールを見つけました。これは、Theliaが必要とするMySQLパターンを自動的に修正できるため、問題を完全に解決できます。

作曲家によるWordPressテーマ開発を簡素化:JointSWPのケーススタディ 作曲家によるWordPressテーマ開発を簡素化:JointSWPのケーススタディ Apr 18, 2025 am 07:57 AM

WordPressのテーマを開発するとき、私はしばしば課題に遭遇します。テーマのリソースファイルを効率的に管理およびコンパイルする方法。 CSSとJavaScriptファイルを手動で管理しようとしましたが、プロジェクトの複雑さが増加するにつれて、このアプローチが維持がますます困難になることがわかりました。作曲家ベースのWordPressテーマフレームワークであるJointSWPを発見するまで、開発プロセスを完全に変更しました。作曲家は次のアドレスを通して学ぶことができます:学習アドレス

See all articles