喜欢的文章PHP是世界上最好的语言

composer.json文件编写规范

2018-07-04  本文已影响560人  孤独而灿烂的郑金叹

根包:是由composer.json项目根目录定义的包。它是composer.json定义项目需求的主要部分。

{
    "name": "zlq/douban",
    "description": "this is a douban house spider",
    "type": "douban",
    "license": "type",
    "authors": [
        {
            "name": "zheng wiliiam",
            "email": "zlqbook@outlook.com"
        }
    ],
    "minimum-stability": "stable",
    "require": {}
}

这是一个json根包的基本信息


字段属性

Apache的2.0
BSD-2-第
BSD -3-第
BSD-4-第
仅限GPL-2.0 / GPL-2.0或更高版本
仅限GPL-3.0 / GPL-3.0或更高版本
LGPL-2.1-only / LGPL-2.1或更高版本
LGPL-3.0-only / LGPL-3.0或更高版本
MIT

建议提供此功能,SPDX开源许可证注册表中列出了更多标识符。
对于闭源软件,可以将其"proprietary"用作许可证标识符。
一个例子:

{
    "license": "MIT"
}

对于包,当在许可证(“析取许可证”)之间进行选择时,可以将多个指定为数组。

析取许可证的示例:

{
    "license": [
       "LGPL-2.1-only",
       "GPL-3.0-or-later"
    ]
}

或者,它们可以用“或”分开并括在括号中;

{
    "license": "(LGPL-2.1-only or GPL-3.0-or-later)"
}

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

{
    "authors": [
        {
            "name": "Nils Adermann",
            "email": "naderman@naderman.de",
            "homepage": "http://www.naderman.de",
            "role": "Developer"
        },
        {
            "name": "Jordi Boggiano",
            "email": "j.boggiano@seld.be",
            "homepage": "https://seld.be",
            "role": "Developer"
        }
    ]
}

电子邮件:支持的电子邮件地址
问题:问题跟踪器的URL。
论坛:论坛的 URL。
wiki:wiki的 URL。
irc:支持的IRC通道,如irc:// server / channel。
source:用于浏览或下载源的 URL。
docs:文档的 URL。
rss: RSS源的URL。

一个例子:

{
    "support": {
        "email": "support@example.org",
        "irc": "irc://irc.freenode.org/composer"
    }
}
{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

所有链接都是可选字段。
require并且require-dev还支持稳定性标志(仅限root)。这些允许您进一步限制或扩展包的稳定性,超出最小稳定性设置的范围。例如,如果要允许不稳定的依赖包,可以将它们应用于约束,或将它们应用于空约束。
例:

{
    "require": {
        "monolog/monolog": "1.0.*@beta",
        "acme/foo": "@dev"
    }
}

如果您的某个依赖项依赖于不稳定的包,则还需要明确要求它,以及其足够的稳定性标志。
例:
假设doctrine/doctrine-fixtures-bundle需要"doctrine/data-fixtures": "dev-master" 在根composer.json中,你需要在下面添加第二行以允许doctrine/data-fixtures包的dev版本:

{
    "require": {
        "doctrine/doctrine-fixtures-bundle": "dev-master",
        "doctrine/data-fixtures": "@dev"
    }
}

require并且require-dev还支持开发版本的显式引用(即提交),以确保它们被锁定到给定状态,即使您运行更新也是如此。这些只有在您明确要求使用开发版本并附加引用时才有效#<ref>。这也是一个 仅限root的功能,在依赖项中将被忽略。

例:

{
    "require": {
        "monolog/monolog": "dev-master#2eb0c0978d290a1c45346a1955188929cb4e5db7",
        "acme/foo": "1.0.x-dev#abc123"
    }
}

注意:此功能具有严重的技术限制,因为仍将从散列之前指定的分支名称中读取composer.json元数据。因此,您应该仅在开发期间将其用作临时解决方案以修复瞬态问题,直到您可以切换到标记版本。Composer团队不主动支持此功能,也不接受与其相关的错误报告。

也可以对包约束进行内联别名,以使其匹配否则不会的约束。有关更多信息,请参阅别名文章。

require并且require-dev还支持对项目成功运行所需的特定PHP版本和PHP扩展的引用。

例:

{
    "require" : {
        "php" : "^5.5 || ^7.0",
        "ext-mbstring": "*"
    }
}

注意:列出项目所需的PHP扩展非常重要。并非所有PHP安装都是相同的:有些可能会错过您可能认为是标准的扩展(例如ext-mysqli默认情况下在Fedora / CentOS最小安装系统中没有安装)。未能列出所需的PHP扩展可能会导致糟糕的用户体验:Composer将安装您的软件包而不会出现任何错误,但它会在运行时失败。该composer show --platform命令列出了系统上可用的所有PHP扩展。您可以使用它来帮助您编译您使用和要求的扩展列表。或者,您可以使用第三方工具分析项目以获取所使用的扩展名列表。

{
    "suggest": {
        "monolog/monolog": "Allows more advanced logging of the application flow",
        "ext-xml": "Needed to support XML format in class Foo"
    }
}
{
    "autoload": {
        "psr-4": {
            "Monolog\\": "src/",
            "Vendor\\Namespace\\": ""
        }
    }
}

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

{
    "autoload": {
        "psr-4": { "Monolog\\": ["src/", "lib/"] }
    }
}

如果您想要一个可以查找任何命名空间的回退目录,您可以使用一个空前缀,如:

{
    "autoload": {
        "psr-4": { "": "src/" }
    }
}

PSR-0 #
在psr-0键下,您可以定义从命名空间到路径的映射,相对于包根。请注意,这也支持PEAR样式的非命名空间约定。

请注意,名称空间声明应该\以确保自动加载器完全响应为止。例如Foo,匹配,FooBar所以尾部反斜杠解决问题:Foo\并且FooBar\是不同的。

在安装/更新期间,PSR-0引用全部组合成单个key => value数组,该数组可以在生成的文件中找到vendor/composer/autoload_namespaces.php。
例:

{
    "autoload": {
        "psr-0": {
            "Monolog\\": "src/",
            "Vendor\\Namespace\\": "src/",
            "Vendor_Namespace_": "src/"
        }
    }
}

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

{
    "autoload": {
        "psr-0": { "Monolog\\": ["src/", "lib/"] }
    }
}

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

{
    "autoload": {
        "psr-0": { "UniqueGlobalClass": "" }
    }
}

如果你想拥有一个任何命名空间的回退目录,你可以使用一个空前缀,如:

{
    "autoload": {
        "psr-0": { "": "src/" }
    }
}
{
    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }
}
{
    "autoload": {
        "files": ["src/MyLibrary/functions.php"]
    }
}

{
"autoload": {
"exclude-from-classmap": ["/Tests/", "/test/", "/tests/"]
}
}

{
"autoload": {
"psr-4": { "MyLibrary\": "src/" }
},
"autoload-dev": {
"psr-4": { "MyLibrary\Tests\": "tests/" }
}
}

{
"include-path": ["lib/"]
}

{
"autoload": {
"psr-0": { "Symfony\Component\Yaml\": "" }
},
"target-dir": "Symfony/Component/Yaml"
}

有关事件的详细信息和示例,请参阅脚本。

有关详细信息,请参阅供应商二进制文件

{
    "archive": {
        "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"]
    }
}

的例子包括/dir/foo/bar/file,/foo/bar/baz,/file.php, /foo/my.test但将排除/foo/bar/any,/foo/baz , /my.test。

上一篇 下一篇

猜你喜欢

热点阅读