你如何管理你的依赖库?
How do you manage your dependency libraries?
你是如何管理你的依赖库的?我将我的项目分成一堆库,因为这些库也用于其他几个项目。一开始,我把它们每个都做成 Git repo,并使用 Git 子模块来管理它们。很快它就变成了一场噩梦。一旦我做了一些改变,我必须在子模块中提交,这很乏味,需要大量的工作。
我想知道 Sylius 是怎么做到的,他们将每个包保存为 Git 和 Packagist 存储库,但他们不使用 Git 或 Composer 来管理他们自己的包。
最好的方法是使用 composer 来管理您的依赖项并自动加载所有 类。
实现这一目标的第一步是准备所有 组件以供 composer 使用,因此您的每个依赖项都将有自己的 composer.json
在根。基本配置可能如下所示:
{
"name": "your/component-name",
"description": "your description",
"license": "proprietary",
"authors": [
{
"name": "Your name",
"email": "you@mail"
}
],
"autoload": {
"psr-4": {
"Your\Complete\Namespace": "src/"
}
},
... etc ...
}
name
字段是您将用于在主项目中加载依赖项的名称
autoload
部分非常重要,因为它将确定所有 类 的 基本命名空间。当您在主项目中导入依赖项时,您将通过此命名空间访问组件 类。
当您的依赖项准备就绪后,您将准备您的主项目以通过 composer 加载它们。所以基本上,这个项目的 composer.json
结构看起来与之前的结构完全相同,但有更多选项可以加载您的依赖项
{
"name": "your/project-name",
"description": "your description",
"license": "proprietary",
"authors": [
{
"name": "Your name",
"email": "you@mail"
}
],
"autoload": {
"psr-4": {
"Your\Project\Namespace": "src/"
}
},
"require": {
"your/dependency1-name" : "dev-master",
"your/dependency2-name" : "dev-master",
....
},
"repositories": [
{
"type": "git",
"url": "https://github.com/the-git-url-of-your-project1"
},
{
"type": "git",
"url": "https://github.com/the-git-url-of-your-project2"
}
]
... etc ...
}
require
部分的每一行将允许您配置要加载的所有依赖项(它是依赖项 composer.json
的 name
部分)在哪个版本(dev-master
或标签编号(如果有的话)。
repositories
部分:除非您的依赖项是在 packagist (https://packagist.org/) 上,否则您必须添加依赖项的存储库(可能是 github、bitbucket 等...)。它与您可以在存储库的克隆部分中找到的 url 相同。
这是您使用 Composer 管理依赖项必须遵循的步骤。显然,您确实需要检查文档以使其适应您的需求,因为它只是对您可以使用 composer 做什么的基本概述。
当一切准备就绪后,composer install
应该将您的依赖项加载到 vendor
目录中,并且您的所有 类 都可以通过其命名空间使用。
您可以查看文档以获取更多选项:
还有这个有用的秘籍Sheet
我在评论中看到(我无法添加评论)您想要将在主应用程序中所做的所有更改提交给所有包。
可以看看composer的no-api选项:
"repositories": [
{
"type": "git",
"no-api": true,
"url": "https://github.com/the-git-url-of-your-project1"
}
]
composer 将在您安装 composer 时进行 git 克隆
另一种不使用 composer 的解决方案是使用 git 个子模块
你是如何管理你的依赖库的?我将我的项目分成一堆库,因为这些库也用于其他几个项目。一开始,我把它们每个都做成 Git repo,并使用 Git 子模块来管理它们。很快它就变成了一场噩梦。一旦我做了一些改变,我必须在子模块中提交,这很乏味,需要大量的工作。
我想知道 Sylius 是怎么做到的,他们将每个包保存为 Git 和 Packagist 存储库,但他们不使用 Git 或 Composer 来管理他们自己的包。
最好的方法是使用 composer 来管理您的依赖项并自动加载所有 类。
实现这一目标的第一步是准备所有 组件以供 composer 使用,因此您的每个依赖项都将有自己的 composer.json
在根。基本配置可能如下所示:
{
"name": "your/component-name",
"description": "your description",
"license": "proprietary",
"authors": [
{
"name": "Your name",
"email": "you@mail"
}
],
"autoload": {
"psr-4": {
"Your\Complete\Namespace": "src/"
}
},
... etc ...
}
name
字段是您将用于在主项目中加载依赖项的名称autoload
部分非常重要,因为它将确定所有 类 的 基本命名空间。当您在主项目中导入依赖项时,您将通过此命名空间访问组件 类。
当您的依赖项准备就绪后,您将准备您的主项目以通过 composer 加载它们。所以基本上,这个项目的 composer.json
结构看起来与之前的结构完全相同,但有更多选项可以加载您的依赖项
{
"name": "your/project-name",
"description": "your description",
"license": "proprietary",
"authors": [
{
"name": "Your name",
"email": "you@mail"
}
],
"autoload": {
"psr-4": {
"Your\Project\Namespace": "src/"
}
},
"require": {
"your/dependency1-name" : "dev-master",
"your/dependency2-name" : "dev-master",
....
},
"repositories": [
{
"type": "git",
"url": "https://github.com/the-git-url-of-your-project1"
},
{
"type": "git",
"url": "https://github.com/the-git-url-of-your-project2"
}
]
... etc ...
}
require
部分的每一行将允许您配置要加载的所有依赖项(它是依赖项composer.json
的name
部分)在哪个版本(dev-master
或标签编号(如果有的话)。repositories
部分:除非您的依赖项是在 packagist (https://packagist.org/) 上,否则您必须添加依赖项的存储库(可能是 github、bitbucket 等...)。它与您可以在存储库的克隆部分中找到的 url 相同。
这是您使用 Composer 管理依赖项必须遵循的步骤。显然,您确实需要检查文档以使其适应您的需求,因为它只是对您可以使用 composer 做什么的基本概述。
当一切准备就绪后,composer install
应该将您的依赖项加载到 vendor
目录中,并且您的所有 类 都可以通过其命名空间使用。
您可以查看文档以获取更多选项:
还有这个有用的秘籍Sheet
我在评论中看到(我无法添加评论)您想要将在主应用程序中所做的所有更改提交给所有包。
可以看看composer的no-api选项:
"repositories": [
{
"type": "git",
"no-api": true,
"url": "https://github.com/the-git-url-of-your-project1"
}
]
composer 将在您安装 composer 时进行 git 克隆
另一种不使用 composer 的解决方案是使用 git 个子模块