一份菜单 - 解读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"
}
],
这个对象包含以下属性:
- name: 作者的姓名,通常使用真名。
- email: 作者的 email 地址。
- homepage: 作者主页的 URL 地址。
- 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"
}
这个对象包含以下属性:
- email: 项目支持 email 地址。
- issues: 跟踪问题的 URL 地址。
- forum: 论坛地址。
- wiki: Wiki 地址。
- irc: IRC 聊天频道地址,类似于 irc://server/channel。
- 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 abei2017emojiEmoji
// 程序回去src文件夹找Emoji.php文件
PSR0(vendor/composer/autoload_namespaces.php)
一个重要的区别:PSR0里面最后一个之后的类名中,如果有下划线,则会转换成路径分隔符,如Name_Space_Test会转换成NameSpaceTest.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 |
---|