重用通过 Composer 安装的依赖项中的资源的推荐方法是什么?

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

我是 PHP 世界中的

composer
新手。

我正在尝试创建一个包

Foo
,其中包含包
Bar
作为依赖项。
Bar
可通过
packagist
获得。不过,
Foo
不需要
Bar
的任何 PHP 代码,只需要一些资源。这些资产可能会随着
Bar
的每个新版本的发布而发生变化,因此与
Foo
一起发布它们实际上并不可行。

Foo
不应该单独运行(尽管它可以),但它应该被其他包用作依赖项 - 例如
Yada
。这就是我的麻烦开始的地方。

那么,我们有

  1. Bar
    有一些资产。
  2. Foo
    使用
    Bar
    作为依赖项,例如带有
    composer.json
    ,相关部分看起来像
{
  "name": "foo/foo",
  "require": {
    "bar/bar": "<some-version>"
  }
}
  1. Yada
    使用
    Foo
    作为依赖项,例如带有
    composer.json
    ,相关部分看起来像
{
  "name": "yada/yada",
  "require": {
    "foo/foo": "<some-version>"
  }
}

我尝试单独安装

Foo
(理论上可以创建一个独立有用的工具)并作为
Bar
的依赖项。我希望始终在同一位置创建
vendor
文件夹(相对于我的
Foo
文件)。

但是:

  1. 如果我直接在
    composer install
    上运行
    Foo
    ,那么
    vendor/Bar
    将被放入
    Foo
    的目录中。
  2. 如果我在
    composer install
    上运行
    Yada
    ,那么
    Foo
    Bar
    都会被安装,但是
    vendor/Foo
    vendor/Bar
    将被放入
    Yada
    的文件夹中,所以
    Bar
    的与 1) 相比,文件将位于不同的位置。 请注意,1)并不意味着我已经在
    composer install
    上运行了
    Yada
    ,更改为
    vendor/Foo
    并再次运行了
    composer install

这意味着,我无法知道我想要使用的资源将放置在与

Foo
的文件相关的位置,可以吗?换句话说:如果
Foo
作为依赖项(或子依赖项或子子.. .)其他一些包?
我了解了可以添加到 
Bar
文件中的

Foo

脚本。这将允许我将资源复制到与

post-install-cmd
文件相关的预先确定的文件夹中,以便可以引用它们。唉,
“仅执行根包的composer.json 中定义的脚本。如果根包的依赖项指定了自己的脚本,Composer 不会执行这些附加脚本。”
。换句话说,当您安装
composer.json
作为 Foo 的依赖项时,
Foo
脚本将不会运行。
“作曲家世界”有针对此类问题的推荐解决方案吗?或者这是否意味着当您想在包中使用 
Yada
时,您不仅需要在

post-install-cmd

中使用

Foo
添加它,而且还要添加一个小
require
脚本来复制/移动资产文件是否符合要求?这对于 PHP 项目来说可以接受吗?
    
我不知道这是否值得推荐,但我能够找到解决我的问题的方法:

php composer-php assets
1个回答
0
投票
composer.json

post-install-cmd

的关系 - 考虑到它可以用作依赖项或在某些时候可能独立使用 - 我创建了一个简单的函数来从

Foo
开始向上遍历文件树,寻找
Bar
    

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