我正在开发我的第一个包。包正在运作。
现在我想在我的包(依赖项)中使用Laravels Collective的HTML。
因此我将其添加到包的composer文件中:
(这个composer.json位于包的根目录中:/ packages / vendor / package)
{
"name": "vendor/package",
"description": "",
"license": "MIT",
"authors": [
{
"name": "firstname lastname",
"email": "[email protected]"
}
],
"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"
}
},
...
当我做作曲家更新时,包的依赖关系不会更新。我在这里错过了什么?
如果您的包尚未上传到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/"
}
},
UPDATE
为了进行正确的包开发,您必须将包文件保存在/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 "[email protected]"
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的东西。请记住,您处于开发阶段,而不是生产阶段。