2016-12-11 41 views
0

我在开发我的第一个包的过程。该封装工作。Laravel 5.3作曲并没有更新包依赖

现在我想用Laravels集体的HTML我的包中(依赖)。

为此我已将此添加到包的作曲家文件:

(这composer.json是在包的根目录:/包装/供应商/包)

{ 
    "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" 
    } 
}, 
... 

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

+0

在这里打印'composer update'输出? –

+0

另外,供应商文件夹的内容? –

回答

1

如果您的软件包尚未上传到packagist.org,则您必须定义本地composer存储库。里面Laravels'应用composer.json添加本地存储库这样的:

"repositories": [ 
    { 
     "type": "path", 
     "url": "/full/or/relative/path/to/development/my-package" 
    } 
], 
"require": { 
    "my-package": "*" 
} 

你必须定义包composer.json内,而不是里面的Laravels包src目录自己composer.json。尝试并定义它像这里面包composer.json

"require" : { 
    "twbs/bootstrap": "dev-master", 
    "laravelcollective/html": "5.3.*" 
}, 
"autoload" : { 
    "psr-4" : { 
     "PackageNamespace\\PackageClass\\" : "src/" 
    } 
}, 

UPDATE

为了做适当包装的发展,你必须保持你的包文件比/vendor/其他一些目录作曲家目录。主要的原因是,开发人员可以删除整个目录/vendor如果有可能发生冲突的问题或清理和设置下作曲家/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.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,我们看到作曲家正确安装laravelcollective/html包:

Composer update

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

+0

我是否理解这是将我自己的软件包从本地路径安装到我的Laravel应用程序中?如果是这样,我不想这样做,因为我仍在开发包。我想要的是包括软件包的依赖关系。 – klaaz

+0

@klaaz那么,你的软件包文件在哪里?在一些* git *版本库或者https://packagist.org/或者在你的本地机器上? –

+0

@klaaz这正是你在开发一个包的时候需要的东西,拥有一个本地的包库,使得改变增加了新的特性,并使它像你想要的那样工作。当你完成你的软件包时,你可以通过https://packagist.org/上传它,并且你需要在应用程序'composer.json'中像其他普通软件包一样。查看我更新的答案,了解适当的软件包开发方法。 –