我正在寻找用PHP开发一个包,但我不希望它立即在GitHub或某个地方提供.在我的包含一个Packagist文件很容易composer.json,但如何在我的文件中添加一个本地包composer.json?另外,我应该在/vendor/foo/bar(相对于根composer.json)构建包,还是应该把它放在其他地方?
编辑:我想我的问题是关于其他人如何写他们的包.是否每个新包都添加到Packagist中,然后当您想要测试更改时,您提交GitHub(或任何地方),然后通过Composer将其拉回来?这看起来效率很低.
Sha*_*Sam 26
由于这个问题有许多不同的组件/标准需要解释,我会尽量在这里解释一下,你可以告诉我或者谷歌它可以提出更具体的问题.
要回答您的第一个问题,"我如何将本地包添加到我的composer.json?":
如果通过"添加本地包"表示自动加载您的类/包,则可以通过在composer中使用PSR-4或PSR-0或Classmap选项来实现.
如果您需要有关PSR-0,PSR-4和Classmap的更多信息,可以使用Google.
"autoload": {
"psr-4": { "Core\\": "src/Core" } ## "standard": { "namespace" : "path/to/dir"}
}
Run Code Online (Sandbox Code Playgroud)
如果您确实想要添加本地包:
composer.json为本地包创建一个,如:
{
"name": "localPackage/core",
"version": "dev-master"
}
Run Code Online (Sandbox Code Playgroud)
您还可以根据需要指定其他属性和/或依赖项.
压缩包,将composer.json文件作为根文件archive.zip,并将其放在需要的位置.
在要包含本地程序包的其他项目/程序包中,将本地程序包名称添加到必需参数中,例如
"localPackage/core": "dev-master"
Run Code Online (Sandbox Code Playgroud)
在repositories参数下添加以下内容:
"repositories" : [
{
"type": "artifact",
"url": "path/to/localPackage.zip"
}
]
Run Code Online (Sandbox Code Playgroud)现在如果你在git上有本地包,那么就没有必要存档包(基本上省略了第2步),你只需要将上面例子中的URL替换为path/to/localPackage/.git.
(编辑完结)
现在回答更大的问题:"我如何开发和包含Composer包?":
确定目录结构.通常如下:
/PackageRoot
/src/PackageCore
composer.json ## this is your library’s composer.json
LICENSE
Run Code Online (Sandbox Code Playgroud)
并设置你的composer.json.
composer.json可以在http://pastebin.com/tyHT01Xg上找到我的一个文件的示例.
使用Packagist注册包(登录后).
如果您已将提交标记为v1.0.0(或类似),则此信息将显示在您的Packagist信息中心中.
现在,如果一切正常,您应该能够将您的库作为其他项目中的依赖项,方法是将其添加到该composer.json项目中.
Fed*_*ero 20
您可以告诉composer使用任何本地路径,而不是创建新的存储库:
https://getcomposer.org/doc/05-repositories.md#path
例如,假设你有PHP项目 ~/devel/projects
你可能有你的主项目~/devel/projects/main_project,你的"本地包"~/devel/projects/local_package
为本地程序包定义编写器配置.在~/devel/projects/local_package/composer.json.
{
"name": "your_vendor_id/your_local_package",
...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以~/devel/projects/main_project/composer.json通过路径仓库编辑并链接到本地包:
"repositories": [
{
"type": "path",
"url": "../local_package",
"options": {
"symlink": true
}
}
],
"require": {
"your_vendor_id/your_local_package": "dev-master",
...
}
Run Code Online (Sandbox Code Playgroud)
有关此链接的更多信息(不是我写的,但对此主题有很好的解释):
似乎这个帖子上的大多数答案都不是"知情".我自己是Composer的新手,但这些答案都是误导性的.问题可以简单地说:"我如何开发作曲家包".
是的,您可以使用自定义存储库或上传未完成的包并在每次更改后更新它.这既不是正确的解决方案,也不是问题的答案.
它没有帮助,作曲的官方文档没有说明这个前期,但你可以看到在标题图书馆文档页面:
每个项目都是一个包
这一点非常重要
前面提到的页面继续说明:
为了使该软件包可安装,您需要为其命名.您可以通过添加name属性来完成此操作
composer.jsonRun Code Online (Sandbox Code Playgroud){ "name": "acme/hello-world", "require": { "monolog/monolog": "1.0.*" } }
到目前为止,在这个例子中,我们有一个必需的包,现在是一个名称.请注意vendor/name格式.
所以现在自动加载我们自己的文件,这在Basic使用页面上有记录.
Run Code Online (Sandbox Code Playgroud){ "autoload": { "psr-4": {"Acme\\": "src/"} } }
这将自动加载目录下的命名空间类文件src/Acme.
谈到乐趣.
使用以下命令安装或更新软件包:
composer update
Run Code Online (Sandbox Code Playgroud)
要么
php composer.phar update
Run Code Online (Sandbox Code Playgroud)
这将下载所需的包并创建autoload.php文件
我们的项目结构应与以下内容类似:
src
Acme
Foo.php
vendor
monolog
...
composer.json
Run Code Online (Sandbox Code Playgroud)
现在来测试一下.
包括autoload.php
require_once 'path/to/project/vendor/autoload.php';
假设Foo.php如下所示:
<?php
namespace Acme;
class Foo {
public static function bar(){
return 'baz';
}
}
?>
Run Code Online (Sandbox Code Playgroud)
然后我们可以从我们的脚本中调用它:
echo Acme\Foo::bar(); // baz
Run Code Online (Sandbox Code Playgroud)
请更正我可能提出的任何误导性信息.这似乎是一个流行问题的解决方案.
这是对我自己的解决方案的回顾
由于你还不想发布,你正在开发中,这是一个糟糕的选择.
您可能不希望在github上发布您的库源,不想支付私人仓库,或者能够使用云外部服务(由于政治或网络策略).
您可以使用示例实现中的composer存储库路径指向本地zip文件作为发行版.每次对lib进行更改时都需要重新压缩,即使使用批处理文件也是如此,这很icky.
这已经接近了,但是每次更改库并且想要测试示例实现时,您都需要更新作曲家.这模仿制作,但很麻烦.我个人推荐这个解决方案,即使它不是没脑子的.
这是一个黑客,但你可以添加:
{
"require": {
},
"autoload": {
"psr-4": {
"yourlibnamespace": "D:\\Code\\yourlib\\src\\"
}
}
Run Code Online (Sandbox Code Playgroud)
}
请注意,您需要将lib中的'require'部分复制+粘贴到示例实现中.将"yourlibnamespace"更改为库命名空间,将"D:\ Code\yourlib\src \"更改为库源的本地路径.
这样,任何更改都会立即反映出来.但是,您根本不会使用或测试库的composer.json文件.如果您更改库中的要求.json它根本不会流过.所以它有一些很大的缺点,但确实可以做你想要的,也就是用尽可能少的命令立即测试你的库实现.
通常你只有src \和tests \,但很多都有例子\你可以在哪里找到样例实现.在开发应用程序时,您可以为这些示例实现做出贡献.您可以在本地git/svn repo中执行此操作,并且您可以自动获取lib的'require'和命名空间.这是世界上最好的.我推荐这种方法.
也许添加自定义存储库会对您有所帮助?
https://github.com/composer/composer/blob/master/doc/05-repositories.md
您可以非常轻松地在库中设置本地git存储库.
当然,如果您使用composer来管理依赖项,您应该在其他地方构建您的库并将其下载到vendor/via composer coz这是我猜的全部观点.
小智 5
为了提高开发效率,我只需将开发存储库符号链接到已经安装它的目录中.
例如,如果/Code/project-1需要包装/Code/package-1,我:
package-1到GitHub的(甚至可以是私有的).project-1使用自定义存储库安装它(请参阅存储库配置链接的其他答案)./Code/project-1/vendor/developer/package-1到/Code/package-1.这样,当我进行更改时/Code/package-1,会立即反映出来/Code/project-1.
这是我在本地创建和开发新的Composer包的过程:
这仍然不理想,但它可以完成中小型包装的工作.
| 归档时间: |
|
| 查看次数: |
18506 次 |
| 最近记录: |