composer.json模式#

本章将解释中可用的所有字段作曲家.json.

JSON模式#

我们有一个JSON模式记录格式和也可以用于验证您的作曲家.json。事实上,它被验证命令。您可以在以下位置找到它:https://getcomposer.org/schema.json网站

根程序包#

根包是由作曲家.json在…的根您的项目。它是主要的作曲家.json它定义了您的项目要求。

某些字段仅在根包上下文中适用。一个示例这是配置字段。只有根包可以定义配置。依赖项的配置被忽略。这使得配置领域根深蒂固地.

注:根据上下文,包可以是根包,也可以不是。例如,如果您的项目依赖于独白库,您的项目是根包。然而,如果您克隆独白从GitHub,以便然后修复其中的错误独白是根包。

属性#

名称#

包的名称。它由供应商名称和项目名称组成,被隔开/。示例:

  • 独白
  • igorw/事件源

名称必须为小写,并且由单词组成,单词之间用-,._.完整名称应匹配^[a-z0-9]([_.-]?[a-z0-2]+)*/[a-z-0-9](([_]|-{1,2})?[a-z0-9]+)*$.

这个名称属性是已发布包(库)所必需的。

注:在Composer 2.0版之前,名称可以包含任何字符,包括空格。

描述#

包的简短描述。通常这是一行长。

对于已发布的包(库)是必需的。

版本#

程序包的版本。在大多数情况下,这不是必需的,应该省略(见下文)。

这必须遵循的格式X、Y、ZvX。Y轴带有可选后缀属于-开发,-补丁(-第页),-阿尔法(-一个),(-b条)或-钢筋混凝土.补丁、alpha、beta和RC后缀后面也可以跟一个数字。

示例:

  • 1.0.0
  • 1.0.2
  • 1.1.0
  • 0.2.5
  • 1.0.0版
  • 1.0.0-α3
  • 1.0.0贝塔2
  • 1.0.0-RC5型
  • 2.0.4-p1版

如果包存储库可以从某处推断版本,则为可选,例如作为VCS存储库中的VCS标记名。在这种情况下,也建议省略它。

注:Packagist使用VCS存储库,因此上面的语句非常对Packagist来说也是如此。自行指定版本由于人为错误,很可能最终在某个时候造成问题。

类型#

包的类型。默认为图书馆.

包类型用于自定义安装逻辑。如果你有包裹这需要一些特殊的逻辑,您可以定义一个自定义类型。这可能是一个symfony-束,一个文字印刷品或atype3-cms扩展。这些类型都将针对特定项目,并且需要提供能够安装该类型软件包的安装程序。

现成的Composer支持四种类型:

  • 图书馆:这是默认设置。它会将文件复制到小贩.
  • 项目:这表示项目而不是库。例如应用程序外壳,如Symfony标准版,CMS喜欢银色条纹安装程序或作为包分发的成熟应用程序。例如,这可以由IDE用来提供项目列表,以便在创建时进行初始化一个新的工作区。
  • 元包:包含需求并将触发的空包它们的安装,但不包含任何文件,也不会向文件系统。因此,它不需要dist或源密钥可安装。
  • 作曲家插件:一个类型的包作曲家插件可以提供具有自定义类型的其他包的安装程序。在中阅读更多信息专用文章.
  • 电话分机php-ext-zend公司:这些名称是为PHP扩展保留的用C编写的包。不要将这些类型用于编写的包PHP格式。

只有在安装期间需要自定义逻辑时才使用自定义类型。确实如此建议省略此字段,并将其默认为图书馆.

关键字#

与包相关的关键字数组。这些关键字可用于搜索和筛选。

示例:

  • 登录中
  • 事件
  • 数据库
  • 再贴现
  • 模板制作

注释:某些特殊关键字触发作曲家要求没有--开发选项提示用户是否要将这些包添加到require-dev要求而不是要求。这些是:开发,测试,静态分析.

注释:字符串中允许的字符范围限制为unicode字母或数字、空格" ",点.,下划线_和破折号-(Regex:'{^[\p{N}\p{L}._-]+$}u')运行时使用其他字符将发出警告编写器验证将导致软件包在Packagist.org上更新失败。

可选。

主页#

项目网站的URL。

可选。

自述文件#

自述文件的相对路径。默认为自述.md.

这主要适用于不在GitHub上的包,因为对于GitHub包,Packagist.org将使用readme API获取GitHup检测到的API。

可选。

时间#

版本的发布日期。

必须在中年-月-日年-月-日HH:MM:SS格式。

可选。

许可证#

包的许可证。这可以是字符串或字符串数组。

最常见许可证的建议符号为(字母):

  • 公寓-2.0
  • BSD-2条款
  • BSD-3条款
  • BSD-4条款
  • 仅GPL-2.0/GPL-2.0级
  • 仅限GPL-3.0/GPL-3.0级
  • 仅LGPL-2.1/LGPL-2.1-或更大
  • 仅LGPL-3.0/LGPL-3.0-or-later
  • 麻省理工学院

可选,但强烈建议提供此功能。更多标识符是列在SPDX开源许可证注册.

注:对于封闭源代码软件,可以使用“专有”作为许可证标识符。

示例:

{“许可证”:“MIT”}

对于软件包,当可以在许可证(“分离许可证”)之间进行选择时,可以将multiple指定为数组。

分离式许可证示例:

{“许可证”:[“仅LGPL-2.1”,“GPL-3.0级”]}

或者,可以用“or”分隔,并用括号括起来;

{“许可证”:“(仅限LGPL-2.1或GPL-3.0或更高版本)”}

类似地,当需要应用多个许可证(“联合许可证”)时,它们应该用“and”分隔,并用括号括起来。

作者#

该包的作者。这是一个对象数组。

每个作者对象可以具有以下属性:

  • 姓名:作者的名字。通常是他们的真名。
  • 电子邮件:作者的电子邮件地址。
  • 主页:作者网站的URL。
  • 角色:作者在项目中的角色(例如开发人员或翻译)

例如:

{“作者”:[{“name”:“Nils Adermann”,“电子邮件”:“naderman@naderman.de",“主页”:“https://www.naderman.de网站",“角色”:“开发人员”},{“name”:“Jordi Boggiano”,“电子邮件”:“j.boggiano@seld.be",“主页”:“https://seld.be网站",“角色”:“开发人员”}]}

可选,但强烈建议。

支持#

获得项目支持的各种信息。

支持信息包括以下内容:

  • 电子邮件:支持电子邮件地址。
  • 问题:问题跟踪器的URL。
  • 论坛:论坛的URL。
  • 维基:wiki的URL。
  • 爱尔兰共和国:IRC支持渠道,如irc://server/channel。
  • 来源:用于浏览或下载源的URL。
  • 文档:文档的URL。
  • 回复:RSS提要的URL。
  • 聊天室:聊天频道的URL。
  • 安全性:漏洞披露策略(VDP)的URL。

例如:

{“支持”:{“电子邮件”:“support@example.org",“irc”:“irc://irc.freenode.org/composer"}}

可选。

基金#

为包作者提供资金以进行维护和开发新功能。

每个条目包含以下内容

  • 类型:资金类型,或提供资金的平台,例如patreon、opencollective、tidelift或github。
  • 网址:一个包含详细信息的网站的URL,以及为该套餐提供资金的方式。

例如:

{“资金”:[{“type”:“patreon”,“url”:“https://www.patreon.com/php原则"},{“type”:“tidelift”,“url”:“https://tidelift.com/subscription/pkg/packagist-doctrine_doctrine-bundle"},{“类型”:“其他”,“url”:“https://www.doctrine-project.org/sponsorship.html"}]}

可选。

以下所有内容都采用将包名称映射到的对象通过版本约束的包版本。阅读更多关于版本在这里.

例子:

{“要求”:{“独白/独白”:“1.0.*”}}

所有链接都是可选字段。

要求require-dev要求额外支持稳定性标志(根深蒂固地).他们采取的形式“约束@稳定性标志".这些允许您进一步限制或扩展包的稳定性的范围最小稳定性设置。你可以申请将它们应用于约束,或将其应用于空约束如果你想的话例如,允许依赖项的不稳定包。

例子:

{“要求”:{“独白/独白”:“1.0.*@beta”,“acme/foo”:“@dev”}}

如果您的一个依赖项依赖于不稳定的包,则需要明确要求它以及它的足够稳定性标志。

例子:

假设条令/条令夹具捆绑包要求“条令/数据框架”:“开发大师”然后在根composer.json中,您需要添加下面的第二行以允许dev发布条令/数据固定装置包裹:

{“要求”:{“条令/条令夹具捆绑包”:“dev-master”,“条令/数据固定装置”:“@dev”}}

要求require-dev要求另外支持显式引用(即。commit),以确保它们被锁定到给定的状态,甚至运行update时。只有当您明确要求开发版本时,这些功能才起作用并将引用附加到#<参考>。这也是一个根深蒂固地功能,并将在中被忽略依赖关系。

例子:

{“要求”:{“monog/monog”:“dev-master#2eb0c0978d290a1c45346a1955188929cb4e5db7”,“acme/foo”:“1.0.x-dev#abc123”}}

注:此功能具有严重的技术限制,因为仍将从指定的分支名称中读取composer.json元数据在散列之前。因此,您只应将其用作临时解决方案在开发过程中修正瞬态问题,直到您可以切换到标记的版本。作曲家团队不积极支持此功能并且不会接受与之相关的错误报告。

还可以内联包约束,以便匹配否则不会受到的约束。有关更多信息请参阅别名文章.

要求require-dev要求还支持对特定PHP版本的引用以及成功运行项目所需的PHP扩展。

例子:

{“要求”:{“php”:“>=7.4”,“ext-mbstring”:“*”}}

注:列出项目所需的PHP扩展非常重要。并非所有PHP安装都是平等创建的:有些可能会错过您的扩展可以视为标准(例如ext-mysqli公司不是由安装的Fedora/CentOS最小安装系统中的默认值)。未能列出所需的PHP扩展可能会导致糟糕的用户体验:Composer会安装包时没有任何错误,但在运行时会失败。这个作曲家表演——平台命令列出了上可用的所有PHP扩展您的系统。您可以使用它来帮助您编译扩展列表使用和要求。或者,您可以使用第三方工具进行分析所用扩展列表的项目。

要求#

此包所需的包的映射。将不安装程序包除非能够满足这些要求。

require-dev要求(根深蒂固地)#

开发此包或运行所需的包的映射默认情况下会安装根包的开发需求。两者都有安装更新支持--无偏差防止开发的选项依赖关系。

冲突#

与此版本的包冲突的包的映射。他们将不允许与您的软件包一起安装。

请注意,当指定以下范围时<1.0 >=1.1在一个冲突链接,这将声明与所有小于1.0的版本冲突平等的或者同时更新到1.1,这可能不是您想要的。可能想去<1.0 || >=1.1在这种情况下。

代替#

被此包替换的包的映射。这允许您将包,以不同的名称发布它,并带有自己的版本号,而需要原始包的包可以继续使用fork,因为它取代了原来的包。

这对于包含子包的包也很有用,例如主包symfony/symfony包包含所有symfony组件可单独提供。如果您需要主包,它将自动满足单个组件之一的任何要求,因为它取代了它们。

为说明的子包目的使用替换时,建议小心以上。然后通常只应使用自我版本作为一个版本约束,以确保主包仅替换的子包准确的版本,而不是任何其他版本,这将是不正确的。

提供#

此包提供的包的映射。这主要是对于公共接口的实现很有用。包可以依赖于一些虚拟包,例如。psr/log-实施,任何实现的库此记录器接口将其列在提供。然后实施者可以在Packagist.org上找到.

使用提供使用实际包的名称而不是虚拟包的名称意味着该包的代码也会被发送,在这种情况下代替通常是更好的选择。提供接口并依赖其他包来提供实现(对于实例PSR接口)是使用-实施后缀与接口包对应的虚拟包的名称。

建议#

建议的程序包可以增强或与此程序包配合使用。这些是信息,并在安装包后显示,以提供您的用户提示他们可以添加更多包,即使他们没有严格要求。

除了值是自由文本外,格式与上面的包链接类似而不是版本约束。

例子:

{“建议”:{“monolog/monlog”:“允许更高级的应用程序流日志记录”,“ext-xml”:“需要在Foo类中支持xml格式”}}

自动加载#

PHP自动加载器的自动加载映射。

PSR-4型PSR-0型自动加载,类映射生成和文件夹支持包含。

PSR-4是推荐的方法,因为它更易于使用(无需以在添加类时重新生成自动加载器)。

PSR-4型#

psr-4型键定义从命名空间到路径的映射,相对于程序包根目录。当自动加载类时,如Foo\\Bar\\Baz餐厅命名空间前缀富\\指向目录型钢混凝土/意味着自动加载器将查找名为的文件src/Bar/Baz.php型并包括它(如果有)。请注意,与旧的PSR-0样式,前缀(富\\)是存在于文件路径中。

命名空间前缀必须以结尾\\以避免相似前缀之间的冲突。例如将匹配中的类FooBar游戏命名空间,因此尾部反斜杠解决了这个问题:富\\FooBar游戏\\是不同的。

在安装/更新过程中,PSR-4参考文件全部合并为一个key=>可以在生成的文件中找到的值数组供应商/作曲家/autoload_psr4.php.

例子:

{“自动加载”:{“psr-4”:{“Monolog\\”:“src/”,“供应商\\命名空间\\”:“”}}}

如果您需要在多个目录中搜索相同的前缀,您可以将它们指定为数组:

{“自动加载”:{“psr-4”:{“Monolog\\”:[“src/”,“lib/”]}}}

如果您希望有一个后备目录,在其中查找任何命名空间,可以使用空前缀,如:

{“自动加载”:{“psr-4”:{“”:“src/”}}}

PSR-0型#

psr-0型键定义从命名空间到路径的映射,相对于程序包根目录。请注意,这也支持PEAR样式的非命名空间约定。

请注意,命名空间声明应以结尾\\确保自动加载器反应准确。例如将匹配FooBar游戏所以尾随反斜杠解决了这个问题:富\\FooBar游戏\\是不同的。

在安装/更新期间,PSR-0引用全部合并为一个键=>值可以在生成的文件中找到的数组供应商/作曲家/自动加载名称空间.php.

例子:

{“自动加载”:{“psr-0”:{“Monolog\\”:“src/”,“供应商\\命名空间\\”:“src/”,“供应商名称空间_”:“src/”}}}

如果您需要在多个目录中搜索相同的前缀,您可以将它们指定为数组:

{“自动加载”:{“psr-0”:{“Monolog\\”:[“src/”,“lib/”]}}}

PSR-0样式不仅限于名称空间声明,还可以直接指定到类级别。这对于具有全局命名空间中只有一个类。如果php源文件也位于例如,在包的根目录中,它可以这样声明:

{“自动加载”:{“psr-0”:{“UniqueGlobalClass”:“”}}}

如果您希望有一个可以放置任何名称空间的回退目录,您可以使用空前缀,如:

{“自动加载”:{“psr-0”:{“”:“src/”}}}

课堂地图#

这个类映射在安装/更新期间,所有引用都合并到一个key=>可以在生成的文件中找到的值数组供应商/作曲家/autolad_classmap.php。此地图是通过扫描所有类.php文件公司给定目录/文件中的文件。

您可以使用类映射生成支持为所有库定义自动加载不遵循PSR-0/4。要进行配置,请指定所有目录或文件搜索类。

例子:

{“自动加载”:{“classmap”:[“src/”,“lib/”,“Something.php”]}}

通配符(*)类映射路径中也支持,并展开以匹配任何目录名:

例子:

{“自动加载”:{“classmap”:[“src/addons/*/lib/”,“第三方/*”,“Something.php”]}}

文件夹#

如果您想在每次请求时明确要求某些文件,则可以使用这个文件夹自动加载机制。如果您的包中包含PHP函数,这将非常有用PHP无法自动加载的。

例子:

{“自动加载”:{“文件”:[“src/MyLibrary/functions.php”]}}

每当供应商/自动加载.php包括在内,就在后面自动加载器已注册。包含的顺序取决于包依赖项,因此如果包A依赖于B,则包B中的文件将首先包括在内,以确保包B是完全的初始化并准备在包含包A中的文件时使用。

如果两个包具有相同数量的依赖项或没有依赖项,则按字母顺序排列。

根包中的文件总是最后加载的,不能使用文件自动加载从依赖项中重写函数。如果你想实现这一点,我们建议您可以包含自己的函数之前包括作曲家的供应商/自动加载.php.

从类映射中排除文件#

如果您想从类映射中排除一些文件或文件夹,可以使用从类映射中排除属性。例如,这可能有助于排除实时环境中的测试类,因为这些类将被跳过即使在构建优化的自动加载器时,也可以从类映射中删除。

类映射生成器将忽略此处配置的路径中的所有文件。路径是包中的绝对路径根目录(即composer.json位置),并支持*匹配除斜线外的任何内容,以及**匹配任何内容。**隐式添加到路径的末尾。

例子:

{“自动加载”:{“exclude-from-classmap”:[“/Tests/”,“/test/”,“/stests/“]}}

优化自动加载器#

自动加载器会对您的请求时间产生相当大的影响(在使用大量类的大型框架中,每个请求50到100毫秒)。请参阅关于优化自动加载器的文章有关如何减少这种影响的更多详细信息。

自动加载的驱动程序(根深蒂固地)#

本节允许为开发目的定义自动加载规则。

运行测试套件所需的类不应包含在主自动加载中避免在生产中和其他人使用时污染自动装弹机的规则作为依赖项的包。

因此,依赖于专用路径进行单元测试是一个好主意并将其添加到autoload-dev部分。

例子:

{“自动加载”:{“psr-4”:{“MyLibrary\\”:“src/”}},“autoload-dev”:{“psr-4”:{“MyLibrary\\Tests\\”:“Tests/”}}}

包括通道#

已弃用:这仅用于支持遗留项目和所有新代码最好使用自动加载。因此,这是一种不受欢迎的做法,但该功能本身不太可能从Composer中消失。

应该附加到PHP的路径列表包含路径(_P).

例子:

{“include-path”:[“lib/”]}

可选。

目标dir#

已弃用:这仅用于支持传统PSR-0风格的自动加载,所有新代码最好使用没有target-dir和项目的PSR-4建议将PSR-0与PHP名称空间一起使用以迁移到PSR-4。

定义安装目标。

如果包根位于命名空间声明之下,则不能自动正确加载。目标目录解决了这个问题。

Symfony就是一个例子。组件有单独的包。这个Yaml组件低于Symfony\Component\Yaml公司。包根是Yaml公司目录。为了使自动加载成为可能,我们需要确保未安装到供应商/symfony/yaml,但改为供应商/symfony/yaml/symfony/组件/yaml,以便自动加载器可以加载它来自供应商/symfony/yaml.

为此,自动加载目标dir定义如下:

{“自动加载”:{“psr-0”:{“Symfony\\Component\\Yaml\\”:“”}},“target-dir”:“Symfony/Component/Yaml”}

可选。

最小稳定性(根深蒂固地)#

这定义了按稳定性筛选包的默认行为。这个默认为稳定的,因此如果您依赖开发包,您应该指定它在您的文件中,以避免意外。

检查每个包的所有版本的稳定性最小稳定性解析时将忽略设置您的项目依赖项。(注意,您还可以指定稳定性要求在每个包的基础上,使用版本约束中的稳定性标志在中指定要求块(参见程序包链接更多详细信息)。

可用选项(按照稳定性顺序)包括开发,阿尔法,β,钢筋混凝土,稳定的.

更稳定(仅限root用户)#

启用此选项后,Composer将更喜欢更稳定的包而不是不稳定的包找到兼容的稳定包是可能的。如果您需要dev版本或只有alphas可用于软件包,这些仍然是选中时,应确保其最低稳定性。

使用“首选稳定”:true以启用。

存储库(根深蒂固地)#

要使用的自定义软件包存储库。

默认情况下,Composer仅使用packagist存储库。通过指定您可以从其他地方获得软件包。

存储库不会递归解析。您只能将它们添加到主目录中作曲家.json.依赖关系的存储库声明作曲家.json忽略。

支持以下存储库类型:

  • 作曲家:Composer存储库是packages.json包文件已送达通过网络(HTTP、FTP、SSH),其中包含作曲家.json具有其他对象距离和/或来源信息。这个packages.json包文件是使用PHP流加载的。您可以在该流上设置额外的选项使用选项参数。
  • 风险投资:版本控制系统存储库可以从git、,svn、化石和汞储存库。
  • 包裹:如果您依赖的项目不支持可以使用包裹存储库。你基本上把作曲家.json对象。

有关其中任何一个的更多信息,请参阅存储库.

例子:

{“存储库”:[{“类型”:“作曲家”,“url”:“http://packages.example.com"},{“type”:“作曲家”,“url”:“https://packages.example.com网站",“选项”:{“ssl”:{“verify_peer”:“true”}}},{“type”:“vcs”,“url”:“https://github.com/Seldaek/monolog网站"},{“type”:“package”,“包装”:{“name”:“smarty/smarty”,“版本”:“3.1.7”,“距离”:{“url”:“https://www.smarty.net/files/smarty-3.1.7.zip",“type”:“zip”},“来源”:{“url”:“https://smarty-php.googlecode.com/svn/",“type”:“svn”,“reference”:“tags/Smarty_3_1_7/distribution/”}}}]}

注:这里的秩序很重要。在查找包时,Composer将从第一个存储库查找到最后一个存储库,并选择第一个匹配项。默认情况下,Packagist最后添加,这意味着自定义存储库可以重写其中的包。

也可以使用JSON对象表示法。然而,JSON键/值对被认为是无序的,因此不能保证一致的行为。

{“存储库”:{“foo”:{“type”:“作曲家”,“url”:“http://packages.foo.com"}}}

配置(根深蒂固地)#

一组配置选项。它仅用于项目。请参见配置了解每个选项的说明。

脚本(根深蒂固地)#

Composer允许您连接到安装过程的各个部分通过使用脚本。

请参见脚本获取事件详细信息和示例。

额外的#

任意额外数据供使用脚本.

这几乎可以是任何东西。从脚本事件中访问它处理程序,您可以执行以下操作:

$extra=$event->getComposer()->getPackage()->getExtra();

可选。

箱子#

一组应被视为二进制文件并可用的文件进入bin目录(来自配置)。

请参见供应商二进制文件了解更多详细信息。

可选。

档案文件#

用于创建包存档的一组选项。

支持以下选项:

  • 姓名:允许配置存档的基本名称。默认情况下(如果未配置,并且--文件不作为命令行参数传递),preg_replace('#[^a-z0-9-_]#i','-',名称)使用。

例子:

{“name”:“org/strangeName”,“存档”:{“name”:“Strange_name”}}
  • 不包括:允许为排除的路径配置模式列表。这个模式语法与.gitignore文件匹配。前导感叹号(!)将导致包含任何匹配的文件,即使以前的模式排除了他们。前导斜线仅在项目开始时匹配相对路径。星号不会扩展为目录分隔符。

例子:

{“存档”:{“排除”:[“/foo/bar”,“baz”,“/*.test”,“!/foo/bar/baz”]}}

示例将包括/目录/foo/bar/file,/foo/bar/baz(英尺/巴/巴兹),/文件.php,/foo/my测试但它将排除/foo/bar/任何,/foo/baz公司、和/我的测试.

可选。

被遗弃的#

指示此包是否已被放弃。

它可以是布尔值,也可以是指向推荐备选方案的包名/URL。

示例:

使用“被抛弃”:真的以表明此包裹已被放弃。使用“放弃”:“独白/独白”表示该包已被放弃,并且推荐的替代方案是独白.

默认为false。

可选。

_评论#

顶级键,用作存储注释的位置(可以是字符串或字符串数组)。

{“注释(_C)”:[“业务逻辑需要包foo/bar”,“删除foo/bar时删除包foo/baz”]}

默认为空。

可选。

非特征分支#

非数字分支名称的正则表达式模式列表(例如“最新”或其他),不会作为功能分支处理。这是一个字符串数组。

如果您有非数字分支名称,例如“latest”、“current”、“latest-stable”或者其他看起来不像版本号的东西,然后Composer处理这些分支作为特征分支。这意味着它会搜索看起来像版本的父分支或在特殊分支(如master)处结束,根包版本号变为父分支或至少主分支或其他的版本。

将非数字命名分支作为版本处理,而不是搜索父分支使用有效版本或特殊分支名称(如master),可以为分支设置模式应作为开发版本分支处理的名称。

当您有使用“self.version”的依赖项时,这真的很有用,这样就不需要使用dev-master,但安装了相同的分支(在示例中:最新测试)。

例如:

如果您有一个测试分支,则在测试阶段会对其进行大量维护通常部署到登台环境作曲家节目-s会给你版本:*dev-master.

如果您配置最新-*作为非功能分支的模式,如下所示:

{“非功能分支”:[“最新-.*”]}

然后作曲家节目-s会给你版本:*最新开发测试.

可选。

命令行界面|存储库

发现打字错误了吗?此文档中有问题吗?分叉和编辑它!