Composer 和本地依赖项
Composer and local dependencies
我想使用 Composer 来管理我自己在工作中使用的私有库,并在工作中将它们用于内网项目。
将代码发布到 packagist 或 github 不是 根据公司规则的一个选项;可以说,所有代码都保留在我们自己的墙内。
我已经想出如何将库单独包含到我的 Intranet Web 应用程序中:
composer.json 网络应用
{
"name": "myapp/appname",
"description": "app that uses some of my libraries",
"require": {
"tmorton/dataaccessobjects": "^1.0.0"
},
"repositories": [
{
"type":"vcs",
"url":"//path/to/library"
}
]
}
我的问题是这个数据访问对象集合依赖于我的 crud 库。
所以看来我应该能够 require
dataaccessobjects 库中 composer.json 中的 crud 库:
composer.json 用于数据访问对象
{
"name": "tmorton/dataaccessobjects",
"description": "Data Access Objects for a set of specific tables",
"type": "library",
"license": "proprietary",
"repositories": [
{
"type": "path",
"url":"//path/to/crud/library"
}
],
"minimum-stability": "dev",
"require": {
"tmorton/crud": "^2.0.0"
}
}
我的 DAO 对象被克隆到 app/vendor,但没有引入 Crud。
我看到的所有文档都谈到了发布到第三方位置,但没有提到本地资源。
我当然可以;但它打败了管理依赖关系的整个想法(此时我不应该知道需要哪个版本的 crud)
composer.json 网络应用
{
"name": "myapp/appname",
"description": "app that uses some of my libraries",
"require": {
"tmorton/dataaccessobjects": "^1.0.0",
"tmorton/crud": "^2.0.0"
},
"repositories": [
{
"type":"vcs",
"url":"//path/to/dao/library"
},
{
"type": "path",
"url":"//path/to/crud/library"
}
]
}
我希望有人能补充一些我似乎遗漏的概念。
的答案似乎表明 type: "package"
不起作用。我没有使用 type: "package"
.
package type is for non-composer dependencies. If you use this type, Composer will not even look for composer.json file inside of defined package source, you need to include all required information about package inside of the package declaration in your project composer.json
我收集到的是,无论您做什么,作曲家——就其本身而言——不会费心查找包含项的依赖项。在抓取第 3 方的东西时它以某种方式起作用,但显然还有其他东西在起作用。我猜是托管本身?
我看到 运行满足内部网需要一些管理开销,这就是我停止使用它的原因。
根据您的情况,我建议您这样做:
对内部包使用git:
您在某处有一个私人 git 回购协议,并且需要 repository directive of composer
“要求”:{
"my/package": "dev-main"
...
},
“存储库”:[
{
“类型”:“git”,
"url": "git@bitbucket.org:my/package.git"
}
]
当然不要提交供应商目录,但要提交 composer.lock。
更新:
请注意,您还需要在项目 composer.json 的存储库块中添加私有子包的存储库。
因此,当 my/package
需要另一个私有包 my/package2
时,将此 my/package2
也添加到项目 composer.json.
的 repositories
块中
- 使用构建进行部署
使用 deployer 之类的工具,您可以轻松地 运行 在生产环境中作曲并符号链接到成功的 build/release 毕竟是 运行.
在这里,您还依赖于生产机器上的作曲家,但部署者通常会在网络根目录之外安装 phar 本身。
如果这不合适,您还可以使用部署程序进行本地构建,并通过 rsync 同步到您的生产系统:
https://deployer.org/docs/advanced/deploy-strategies.html#build-server
在这里,您在构建目录中从 git 本地签出,在本地 运行 那里作曲并通过 rsync 推送到生产环境。
我想使用 Composer 来管理我自己在工作中使用的私有库,并在工作中将它们用于内网项目。
将代码发布到 packagist 或 github 不是 根据公司规则的一个选项;可以说,所有代码都保留在我们自己的墙内。
我已经想出如何将库单独包含到我的 Intranet Web 应用程序中:
composer.json 网络应用
{
"name": "myapp/appname",
"description": "app that uses some of my libraries",
"require": {
"tmorton/dataaccessobjects": "^1.0.0"
},
"repositories": [
{
"type":"vcs",
"url":"//path/to/library"
}
]
}
我的问题是这个数据访问对象集合依赖于我的 crud 库。
所以看来我应该能够 require
dataaccessobjects 库中 composer.json 中的 crud 库:
composer.json 用于数据访问对象
{
"name": "tmorton/dataaccessobjects",
"description": "Data Access Objects for a set of specific tables",
"type": "library",
"license": "proprietary",
"repositories": [
{
"type": "path",
"url":"//path/to/crud/library"
}
],
"minimum-stability": "dev",
"require": {
"tmorton/crud": "^2.0.0"
}
}
我的 DAO 对象被克隆到 app/vendor,但没有引入 Crud。
我看到的所有文档都谈到了发布到第三方位置,但没有提到本地资源。
我当然可以;但它打败了管理依赖关系的整个想法(此时我不应该知道需要哪个版本的 crud)
composer.json 网络应用
{
"name": "myapp/appname",
"description": "app that uses some of my libraries",
"require": {
"tmorton/dataaccessobjects": "^1.0.0",
"tmorton/crud": "^2.0.0"
},
"repositories": [
{
"type":"vcs",
"url":"//path/to/dao/library"
},
{
"type": "path",
"url":"//path/to/crud/library"
}
]
}
我希望有人能补充一些我似乎遗漏的概念。
type: "package"
不起作用。我没有使用 type: "package"
.
package type is for non-composer dependencies. If you use this type, Composer will not even look for composer.json file inside of defined package source, you need to include all required information about package inside of the package declaration in your project composer.json
我收集到的是,无论您做什么,作曲家——就其本身而言——不会费心查找包含项的依赖项。在抓取第 3 方的东西时它以某种方式起作用,但显然还有其他东西在起作用。我猜是托管本身?
我看到 运行满足内部网需要一些管理开销,这就是我停止使用它的原因。
根据您的情况,我建议您这样做:
对内部包使用git:
您在某处有一个私人 git 回购协议,并且需要 repository directive of composer“要求”:{
"my/package": "dev-main"
...
},
“存储库”:[
{
“类型”:“git”,
"url": "git@bitbucket.org:my/package.git"
}
]
当然不要提交供应商目录,但要提交 composer.lock。
更新:
请注意,您还需要在项目 composer.json 的存储库块中添加私有子包的存储库。
因此,当 my/package
需要另一个私有包 my/package2
时,将此 my/package2
也添加到项目 composer.json.
repositories
块中
- 使用构建进行部署
使用 deployer 之类的工具,您可以轻松地 运行 在生产环境中作曲并符号链接到成功的 build/release 毕竟是 运行.
在这里,您还依赖于生产机器上的作曲家,但部署者通常会在网络根目录之外安装 phar 本身。
如果这不合适,您还可以使用部署程序进行本地构建,并通过 rsync 同步到您的生产系统: https://deployer.org/docs/advanced/deploy-strategies.html#build-server
在这里,您在构建目录中从 git 本地签出,在本地 运行 那里作曲并通过 rsync 推送到生产环境。