Laravel 5.3 Composer不会更新包依赖项

问题描述 投票:0回答:1

我正在开发我的第一个包。包正在运作。

现在我想在我的包(依赖项)中使用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"
    }
},
...

当我做作曲家更新时,包的依赖关系不会更新。我在这里错过了什么?

php composer-php laravel-5.3
1个回答
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/"
    }
},

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.namegit 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 update

在我们更改包composer.json并需要"laravelcollective/html" : "5.3.*",之后,我们做了composer update,我们看到composer正确安装了laravelcollective/html包:

Composer update

我知道这可能看起来令人困惑,而且有点过分,但这是开发作曲家包的正确方法。您还可以将您的包放在git存储库中,并使composer克隆该存储库而不是本地文件。当你完成开发包并在https://packagist.org/下发布它时,你将只需要你的包作为任何其他普通包而没有存储库和所有本地git的东西。请记住,您处于开发阶段,而不是生产阶段。

© www.soinside.com 2019 - 2024. All rights reserved.