我正在开发我的第一个包。包裹正在运作。
现在我想在我的包(依赖项)中使用Laravels Collective的HTML。
因此我将其添加到了包的作曲家文件中:
(这个composer.json位于包的根目录:/ packages / vendor / package)
{
"name": "vendor/package",
"description": "",
"license": "MIT",
"authors": [
{
"name": "firstname lastname",
"email": "info@domain.nl"
}
],
"minimum-stability": "stable",
"require": {
"twbs/bootstrap": "dev-master",
"laravelcollective/html": "5.3.*"
}
}
我在Laravel自己的composer.json中包含了这个包:
...
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"Vendor\\Package\\": "packages/vendor/package/src"
}
},
...
当我做作曲家更新时,包的依赖关系不会更新。我在这里缺少什么?
答案 0 :(得分:1)
如果您的包尚未上传到packagist.org,则必须定义本地编写器存储库。在Laravels的应用程序composer.json
内添加一个本地存储库,如下所示:
"repositories": [
{
"type": "path",
"url": "/full/or/relative/path/to/development/my-package"
}
],
"require": {
"my-package": "*"
}
您必须在包src
内定义包composer.json
目录,而不是在Laravels自己的composer.json
内。在包'composer.json
:
"require" : {
"twbs/bootstrap": "dev-master",
"laravelcollective/html": "5.3.*"
},
"autoload" : {
"psr-4" : {
"PackageNamespace\\PackageClass\\" : "src/"
}
},
<强>更新强>
为了进行正确的包开发,您必须将包文件保存在/vendor/
composer目录以外的某个目录中。主要原因是,如果可能存在冲突问题,或者在composer /vendor
路径下清理和设置所有内容,开发人员可以删除整个/vendor
目录。我使用一种非常简单的方法,并将自己的包保存在:
<application>/dev/packages/<package-namespace>/<package-name>
你必须在你的包中初始化一个git,以便composer能够识别存储库。要创建一个git包,请转到您的包位置并运行以下命令:
cd <application>/dev/packages/<package-namespace>/<package-name>
git init
git add *
git commit -m "Initial commit"
您可能还需要在提交前设置git config user.name
和git config user.email
,以便git能够识别某人并允许本地提交:
git config user.email "you@example.com"
git config user.name "Your Name"
在我的示例中,命名空间为lytr
,包名称为testpkg
。
<application>/dev/packages/<package-namespace>/<package-name>/composer.json
(<application>/dev/packages/lytr/testpkg
)将如下所示:
{
"name" : "lytr/testpkg",
"description" : "Test package of Lytr",
"keywords" : [
"test",
"package"
],
"license" : "MIT",
"require" : {
"twbs/bootstrap" : "dev-master",
"laravelcollective/html" : "5.3.*"
},
"autoload" : {
"psr-0" : {
"Lytr\\TestPkg\\" : "src"
}
},
"extra" : {
"branch-alias" : {
"dev-master" : "1.0-dev"
}
},
"minimum-stability" : "dev"
}
然后在您的应用程序<application>/composer.json
,您将拥有一个本地git存储库,您的软件包就像这样:
"repositories": [
{
"type": "path",
"url": "<full-application-path>/dev/packages/lytr/testpkg"
}
],
"require" : {
"lytr/testpkg": "*"
},
"minimum-stability": "dev",
我包含"minimum-stability": "dev",
,因为我们使用的是master-dev
版本。然后在运行composer update
命令 后,在程序包要求中具有"twbs/bootstrap" : "dev-master",
,我们将在控制台窗口中看到以下输出:
在我们更改包composer.json
并需要"laravelcollective/html" : "5.3.*",
之后,我们执行了composer update
,我们看到composer正确安装了laravelcollective/html
包:
我知道这可能看起来令人困惑,而且有点过分,但这是开发编写器包的正确方法。您还可以将您的包放在git存储库中,并使composer克隆该存储库而不是本地文件。当你完成开发包并在https://packagist.org/下发布它之后,你将只需要你的包作为任何其他普通包而没有存储库和所有本地git的东西。请记住,您处于开发阶段而非生产阶段。