>개발 도구 >composer >리뷰 작성자

리뷰 작성자

藏色散人
藏色散人앞으로
2020-12-02 15:07:452063검색

다음 튜토리얼 칼럼인 composer에서 작곡가를 리뷰할 수 있습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

리뷰 작성자

Composer는 PHP 커뮤니티에서 권장하는 종속성 관리 도구입니다. Composer는 Node.js의 npm과 마찬가지로 PHP의 경우 현대 PHP 개발에 거의 필요한 기술입니다. 이 기사에서는 Composer의 관련 개념과 사용법을 간략하게 검토합니다.

Extensions and packages

관련 개념은 프레임워크와 라이브러리입니다. 프레임워크와 라이브러리의 차이점은 제가 이전에 쓴 이 글을 확인하세요.

Extensions와 패키지는 매우 유사한 개념입니다. PHP 세계에서는 일반적으로 두 가지를 다음과 같이 이해하고 구별할 수 있습니다. 확장과 모듈은 동일하며 C 언어로 작성된 함수 모음입니다. 패키지와 라이브러리는 동일하며 주로 C 언어로 작성됩니다. PHP 확장으로 구현된 기능은 동적 링크 라이브러리(dll 등) 형식으로 로드되고 패키지는 require/include를 통해 로드됩니다. 대부분의 경우 두 가지를 혼합해도 이해하는 데 어려움이 발생하지 않습니다.

공통 확장에는 GD, ZIP, XML, MySQLi, OPCache 등이 포함됩니다. 일반 패키지에는 PHPMailer, PHPOffice, HTMLPurifier 등이 포함됩니다.

PEAR 및 PECL

Composer가 인기를 끌기 전에는 PEAR와 PECL이 PHP 개발자에게 더 잘 알려진 두 가지 도구(커뮤니티)였습니다. PEAR는 PHP Extension and Application Repository의 약어이고 공식 웹사이트는 http://pear.php.net입니다. PECL은 PHP Extension Community Library의 약어이며 공식 웹사이트는 http://pecl입니다.

둘 사이의 차이점은 확장과 패키지로 구분할 수 있습니다. PECL 호스팅 확장, 소스 코드는 대부분 APC, AMPQ 등과 같은 C 파일이며, 기능은 PHP와 같은 PHP로 구현됩니다. CodeSniffer, HTTP 요청 등은 PEAR 명령에 해당하고 PECL은 pecl 명령에 해당합니다. 이 두 명령을 사용하여 확장 및 패키지를 설치하고 관리할 수 있습니다(pear의 build/pickle 하위 명령은 PECL에서 확장을 컴파일할 수도 있습니다). 두 사람은 서로를 보완하며, 공식 홈페이지에는 자매 관계라고 적혀 있다.

PECL은 공식 확장팩의 추가 버전이며 여전히 활발하게 활동 중입니다. 일부 우수한 확장팩은 공식 확장팩이 될 가능성이 있습니다. Master Han Tianfeng의 스울 확장은 PECL에서도 개최되며 중국에서도 매우 잘 알려져 있습니다. 이에 비해 PEAR는 과거의 일입니다. PEAR2와 Pyrus(차세대 PEAR 패키지 설치 도구, PHP5.3+를 기반으로 구축됨, 공식 웹사이트 http://pear2.php.net)의 등장으로 PEAR를 저장할 수 없었습니다. PEAR의 쇠퇴는 이 글의 주인공인 Composer의 부상을 동반합니다.

PEAR의 포지셔닝은 "재사용 가능한 PHP 구성 요소를 제공"하고 개발자에게 중앙 집중식으로 기능 패키지를 제공하는 것입니다. 중앙 집중식 릴리스 방식은 코드의 품질을 보장하지만 유지 관리의 불편함도 가져옵니다. 검토를 통과한 패키지만 릴리스할 수 있으며 패키지 노후화 현상이 심각합니다. PEAR에 의해 설치되는 패키지는 전역 패키지이며 개별 프로젝트에 대해 종속 패키지를 설치할 수 없습니다. 권한이 없는 사용자는 종속 패키지를 직접 설치할 수 없습니다. 다른 단점으로는 빈약한 종속성 관리가 있습니다. Github의 인기와 Composer의 등장으로 패키지 관리는 Composer 시대로 접어들었습니다. PEAR는 역사적 사명을 완수했으며 안심하고 갈 수 있습니다.

Composer

엄밀히 말하면 Composer는 패키지 관리자가 아닌 종속성 관리 도구로 포지셔닝됩니다. Composer 중국어 웹사이트에서는 Composer의 작업을 다음과 같이 소개합니다.

Composer가 문제를 다음과 같이 해결해 드립니다.

a) 여러 라이브러리에 의존하는 프로젝트가 있습니다.

b) 이러한 라이브러리 중 일부는 다른 라이브러리에 의존합니다.

c) 당신은 당신이 의지하는 것을 선언합니다.

d) Composer는 설치해야 할 패키지 버전을 파악하고 설치합니다(프로젝트에 다운로드).

Composer는 PEAR가 할 수 있는 모든 것을 할 수 있으며(PECL 확장 설치 포함) 일부는 더 잘 할 수 있습니다. Composer는 기본적으로 프로젝트 디렉터리에 패키지를 설치하며 일반 사용자는 정상적으로 사용할 수 있습니다. (Composer는 루트로 작곡가 명령을 실행하지 말 것을 공식적으로 권장합니다.) 모범 사례를 따르는 것이 좋습니다(예: 유명한 PSR 사양, 자세한 내용은 다음을 참조하세요). PHP-FIG 공식 웹사이트(https://www.php-fig.org)는 PHP 커뮤니티에서 코딩 스타일의 표준화를 크게 촉진합니다. Composer는 누구나 코드 패키지를 검토할 필요가 없는 분산형 플랫폼입니다. 패키지를 게시할 때 패키지의 품질은 사용자 투표에 의해 결정됩니다. PEAR의 후속 제품인 Composer의 성능은 커뮤니티의 테스트를 통과했으며 종속성 관리를 위한 사실상의 표준 도구가 되었습니다.

Composer는 이제 거대한 생태계를 형성했으며, 양적으로 보면 Composer의 패키지가 PEAR를 훨씬 능가합니다. 누구나 검토 없이 자유롭게 패키지를 게시할 수 있으므로 Composer 생태계의 패키지에는 고르지 않은 코드 품질, 다양한 코드 스타일, 백도어 취약성과 같은 숨겨진 우려 사항이 있을 수 있습니다. 또한 Composer의 종속성 관리는 프로젝트를 기반으로 하며 동일한 패키지가 컴퓨터에 여러 번 설치될 수 있습니다. 그러나 전체적으로 Composer는 PHP 개발 생태계를 크게 변화시키고 코드 교환 및 커뮤니티 개발을 촉진했습니다.

Composer Usage

Composer는 프로젝트의 종속성을 관리하도록 설계되었으며, 프로젝트에 있는 작곡가.json 파일이 작업의 기반이 됩니다. 파일에서 가장 중요한 부분은 require 섹션으로, Composer에게 설치할 패키지와 해당 버전을 알려줍니다. 예:

{
    "name": "tlanyan/foo",
    "version": "1.0.0",
    ....
    "require": {
        "php": ">=5.4.0",
        "yiisoft/yii2": ">=2.0.6",
        "yiisoft/yii2-swiftmailer": "*",
        "yiisoft/yii2-redis": ">=2.0.0",
        "smarty/smarty": "< =3.1.25",
        "yiisoft/yii2-smarty": ">=2.0.0",
        "phpoffice/phpexcel": ">=1.8.0",
        "tecnickcom/tcpdf": "~6.2.0"
    },
    ....
}

然后运行composer install命令,Composer会自动分析依赖,安装最合适的包到vendor目录下。加-v(-vv, -vvv)选项会打印命令执行过程中的详细信息。安装完毕后,vendor目录下会生成autoload.php文件。在项目的入口文件中包含此文件: require __DIR__ . "/vendor/autoload.php";,接下来便可在项目的任何地方引用依赖包中的接口和类。

install命令,Composer提供了许多其他命令管理依赖。常用的命令场景包括:查找依赖、引入依赖、安装依赖、更新依赖。分别对应的命令是:

  1. composer search: 根据关键字查找依赖包,例如查找本人发布的包:composer search tlanyan。该命令等同于上https://packagist.org进行包查找;
  2. composer require: 引入依赖,声明项目或者全局(global,用户名全局,非系统全局)依赖某个包, 例如声明需要swiftmailer包: composer require [global] "swiftmailer/swiftmailer:dev-master";该命令更新composer.json文件,并默认立即安装依赖(--no-update选项可阻止默认安装);效果等同于编辑composer.json文件,然后执行install命令;
  3. composer install:安装composer.json声明的依赖包,最终安装的依赖包版本可能取决于有无composer.lock文件;
  4. composer update: 更新依赖到最新版本,相当于删除composer.lock文件后执行composer install

以上四条命令涵盖使用Composer的大部分场景。以下是几个常用的辅助命令,与依赖分析相关:

  1. composer info: 查看安装的依赖包信息,与composer show等价;
  2. composer dumpautoload: 加-o选项可导出优化的加载器;
  3. composer why(-not): 查看(不)安装某个包的原因。

总结

从拷贝第三方代码到项目中(1994),到PEAR安装依赖包(1999),再到Composer兴起(2012),PHP社区经历了将近20年的探索。PHP这门古老的语言,也在不断的发展更新,在web领域一直发光发热。Composer作为目前PHP包依赖管理的最佳工具,值得每一位PHP开发人员掌握。

위 내용은 리뷰 작성자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제