如果你的包还没有上传到packagist.org,你必须定义一个本地作曲家存储库。在 Laravel 的应用程序 composer.json 中添加一个本地存储库,如下所示:
"repositories": [
{
"type": "path",
"url": "/full/or/relative/path/to/development/my-package"
}
],
"require": {
"my-package": "*"
}
您必须在包composer.json 中定义包src 目录,而不是在Laravel 自己的composer.json 中。尝试在包的composer.json 中这样定义它:
"require" : {
"twbs/bootstrap": "dev-master",
"laravelcollective/html": "5.3.*"
},
"autoload" : {
"psr-4" : {
"PackageNamespace\\PackageClass\\" : "src/"
}
},
更新
为了进行正确的包开发,您必须将包文件保存在/vendor/composer 目录之外的某个目录中。主要原因是开发者可以删除整个/vendor目录,如果可能存在冲突问题或清理和设置composer/vendor路径下的所有内容。我使用一种非常简单的方法,并将自己的包保存在:
<application>/dev/packages/<package-namespace>/<package-name>
您必须在您的包中初始化一个 git,以便作曲家识别存储库。要制作 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 东西。请记住,您正处于软件包的开发阶段,而不是生产阶段。