安装已被另一个依赖项安装的依赖项

Installing a dependency already installed by another dependency

这是我第一次在SO上提问,那是因为我找不到任何符合我问题的关键字。

我有一个 Symfony 应用程序,我正在使用通过 composer 下载的 easyadmin 包。我会用 easyadmin 的例子来解释事实,但我的问题也可能在另一个包上。

因此,easyadmin 包具有多个依赖项,如 jquery v2.2.0bootstrap v3.3.6Respond.js v1.4.2select2 4.0.1 等...[= 的依赖项12=] 直到现在都不是问题。事实上,我现在需要使用 bootstrap 的最新版本,即 4.1.1.

与我的其他前端依赖项一样,我正在使用 yarn。我所有的前端依赖项都在一个名为 dependencies 的文件夹中,该文件夹位于 public/asset 我项目的文件夹。

我已经尝试使用 yarn 下载 bootstrap 的最新版本,但现在我的项目中加载了两个版本的 bootstrap有问题吗?

为了用 javascript 文件来说明这一点(因为我的问题涉及 js 和 css 文件),我有一个 vendor 文件夹,里面有 easyadmin :

- vendor
|
--- easyadmin-bundle
  |
  --- src/Resources/public/javascript/
    |
    --- select2.min.js
    --- bootstrap.min.js
    --- respond.min.js

我的文件夹 dependencies 包含我项目的所有依赖项:

- public
|
--- asset
  |
  --- dependencies
    |
    --- bootstrap.min.js

据我了解,在这种情况下,我必须在我的项目中有两个版本的bootstrap。因为 easyadmin 使用 bootstrap v3 来实现它的功能,而 我的项目需要 bootstrap 4我说得对吗?

并且,例如,如果 easyadmin 使用 bootstrap 的版本 4,我是否必须将 bootstrap 4 添加到我的项目中,或者我应该使用 bootstrap 版本 easyadmin ?我很困惑..

提前感谢您对未来的回答。

在您的示例中,具有两个版本的 bootstrap 不是问题,因为 EasyAdminBundle 附带这些依赖项,这些依赖项隐藏在 src/Resources/public/ 中的包中。这些将被复制或符号链接到您项目的 public 文件夹中。这意味着只要您不覆盖其中的任何一个并且不在您的前端逻辑中不小心将它们混在一起,您应该没问题。不混淆它们应该很容易,因为您只需要 public/asset 文件夹中的文件,这些文件不会干扰 EasyAdminBundle 创建的文件。

您不应该依赖 EasyAdminBundle 中的 js 和 css,因为您无法控制它的更新方式。因此,即使 EasyAdminBundle 在某个时候移动到 bootstrap 4,我还是建议将您的前端依赖项与 EasyAdminBundle 提供的依赖项分开。此建议可能不适用于提供资产的每个捆绑包。