前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >composer系列之三

composer系列之三

作者头像
botkenni
发布2019-09-02 17:25:13
8530
发布2019-09-02 17:25:13
举报
文章被收录于专栏:IT码农IT码农

一份菜单 - 解读composer.json的各项内容

本文为你介绍composer.json中的各项。

name *

包名,它包括供应商名称和项目名称,使用 / 分开,比如下面的样子。

代码语言:javascript
复制
abei2017/yii2-emoji

这个主要起到一个命名空间的作用,比如一个项目可以需要 abei2017/yii2-emoji 和 abei2017/yii2-cool-sms ,那么在vendor里可以将yii2-emoji和yii2-cool-sms都放到abei2017文件夹下。

另外这样做可以避免重复,比如开发者abei2017和开发者anan2017多做了库yii2-ext这个扩展,因为有命名空间的限制,所以不不会冲突。

description *

一个包的简短描述。通常这个最长只有一行。比如看下面yii2的一个description。

代码语言:javascript
复制
{
    "name": "yiisoft/yii2-app-basic",
    "description": "Yii 2 Basic Project Template"
}

version

版本,不是必须的,并且建议忽略。所以这里也不在进行说明,毕竟我们都是放到github上,给composer提交的时候它会自己分析。

type *

包的安装类型,默认为 library。你可以设定一个自定义的类型。这可以是一个 wordpress-plugin等。这些类型都将是具体到某一个项目,而对应的项目将要提供一种能够安装该类型包的安装程序。

比如我们开发的yii2扩展,它的类型就是 yii2-extension,而yii2程序提供了一个逻辑进行该包的处理。

代码语言:javascript
复制
vendor/yiisoft/yii2-composer/Installer.php

当然composer原生支持以下4种类型:

  • library: 这是默认类型,它会简单的将文件复制到 vendor 目录。
  • project: 这表示当前包是一个项目,而不是一个库。
  • metapackage: 当一个空的包,包含依赖并且需要触发依赖的安装,这将不会对系统写入额外的文件。因此这种安装类型并不需要一个 dist 或 source。
  • composer-plugin: 一个安装类型为 composer-plugin 的包,它有一个自定义安装类型,可以为其它包提供一个 installler。

仅在你需要一个自定义的安装逻辑时才使用它。建议忽略这个属性,采用默认的 library。

keywords

该包相关的关键词的数组。这些可用于搜索和过滤。

homepage

该项目网站的 URL 地址。

time

版本发布时间。必须符合 YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS 格式。

license

协议,这个还是写上吧,最近因为版权除了很多事,比如某某大公司把开发者的代码申请了专利云云。

  • Apache-2.0
  • BSD-2-Clause
  • BSD-3-Clause
  • BSD-4-Clause
  • GPL-2.0
  • GPL-2.0+
  • GPL-3.0
  • GPL-3.0+
  • LGPL-2.1
  • LGPL-2.1+
  • LGPL-3.0
  • LGPL-3.0+
  • MIT

对于闭源软件,你必须使用 "proprietary" 协议标识符。

license的一些写法如下

代码语言:javascript
复制
"license": "MIT" // abei2017/yii2-emoji
"license": "BSD-3-Clause",// yii2
"license": ["LGPL-2.1","GPL-3.0+"]
"license": "(LGPL-2.1 or GPL-3.0+)"
"license": "(CC-BY-4.0 and MIT)",   // emojione/emojione

使用一个扩展时候一定先看看它的协议

authors

选填,建议填写,是一个数组形式,如下图

代码语言:javascript
复制
"authors": [
    {
        "name": "Qiang Xue",
        "email": "qiang.xue@gmail.com",
        "homepage": "http://www.yiiframework.com/",
        "role": "Founder and project lead"
    },
    {
        "name": "Alexander Makarov",
        "email": "sam@rmcreative.ru",
        "homepage": "http://rmcreative.ru/",
        "role": "Core framework development"
    }
],

这个对象包含以下属性:

  1. name: 作者的姓名,通常使用真名。
  2. email: 作者的 email 地址。
  3. homepage: 作者主页的 URL 地址。
  4. role: 该作者在此项目中担任的角色(例:开发人员 或 翻译)。

support

一些支持,比如有个论坛、有个聊天时等等,看下面代码

代码语言:javascript
复制
"support": {
    "issues": "https://github.com/yiisoft/yii2/issues?state=open",
    "forum": "http://www.yiiframework.com/forum/",
    "wiki": "http://www.yiiframework.com/wiki/",
    "irc": "irc://irc.freenode.net/yii",
    "source": "https://github.com/yiisoft/yii2"
}

这个对象包含以下属性:

  1. email: 项目支持 email 地址。
  2. issues: 跟踪问题的 URL 地址。
  3. forum: 论坛地址。
  4. wiki: Wiki 地址。
  5. irc: IRC 聊天频道地址,类似于 irc://server/channel。
  6. source: 网址浏览或下载源。

require*

必须的软件包列表,除非这些依赖被满足,否则不会完成安装。这个是很重要的,比如你按照yii2-emoji,它的require是下面的样子。

代码语言:javascript
复制
"require": {
    "yiisoft/yii2": "*",
    "emojione/emojione": "^3.1"
}

则必须还要安装yiisoft/yii2和emojione/emojione,如果系统中以及存在则不用再安装。

require-dev (root-only)

这个列表是为开发或测试等目的,额外列出的依赖。可以使用 --no-dev 参数来跳过 require-dev 字段中列出的包。

autoload

PHP autoloader 的自动加载映射。存在vendor/composer里的一些文件的一些映射关系。

PSR4(vendor/composer/autoload_psr4.php),看如下代码

代码语言:javascript
复制
"autoload": {
    "psr-4": {
        "abei2017\\emoji\\": "src"
    }
}

那么这个设置代表了什么那?

代码语言:javascript
复制
use abei2017\emoji\Emoji
// 程序回去src文件夹找Emoji.php文件

PSR0(vendor/composer/autoload_namespaces.php)

一个重要的区别:PSR0里面最后一个\之后的类名中,如果有下划线,则会转换成路径分隔符,如Name_Space_Test会转换成Name\Space\Test.php。在PSR4中下划线不存在实际意义

Classmap(vendor/composer/autoload_classmap.php)这个 map 是经过扫描指定目录(同样支持直接精确到文件)。

你可以用 classmap 生成支持支持自定义加载的不遵循 PSR-0/4 规范的类库。要配置它指向需要的目录,以便能够准确搜索到类文件。

代码语言:javascript
复制
//phpunit
"autoload": {
    "classmap": [
        "src/"
    ]
},

Files

如果你想要明确的指定,在每次请求时都要载入某些文件,那么你可以使用 'files' autoloading。通常作为函数库的载入方式(而非类库)。

代码语言:javascript
复制
{
    "autoload": {
        "files": ["src/MyLibrary/functions.php"]
    }
}

include-path

不建议:这是目前唯一支持传统项目的做法,所有新的代码都建议使用自动加载。 这是一个过时的做法,但 Composer 将仍然保留这个功能。

代码语言:javascript
复制
{
    "include-path": ["lib/"]
}

minimum-stability

这定义了通过稳定性过滤包的默认行为。默认为 stable(稳定)。因此如果你依赖于一个 dev(开发)包,你应该明确的进行定义。

可用的稳定性标识(按字母排序):dev、alpha、beta、RC、stable。

repositories

使用自定义的包资源库。

默认情况下 composer 只使用 packagist 作为包的资源库。通过指定资源库,你可以从其他地方获取资源包。

Repositories 并不是递归调用的,只能在“Root包”的 composer.json 中定义。附属包中的 composer.json 将被忽略。

archive

这些选项在创建包存档时使用。

exclude: 允许设置一个需要被排除的路径的列表。使用与 .gitignore 文件相同的语法。一个前导的(!)将会使其变成白名单而无视之前相同目录的排除设定。前导斜杠只会在项目的相对路径的开头匹配。星号为通配符。

代码语言:javascript
复制
{
    "archive": {
        "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"]
    }
}

G

M

T

Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

Text-to-speech function is limited to 200 characters

Options : History : Feedback : Donate

Close

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一份菜单 - 解读composer.json的各项内容
  • name *
  • description *
  • version
  • type *
  • keywords
  • homepage
  • time
  • license
  • authors
  • support
  • require*
  • require-dev (root-only)
  • autoload
  • include-path
  • minimum-stability
  • repositories
  • archive
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档