如何使用 composer 在框架中管理自定义库和核心库



我有一个定制的小 mvc 框架,我用它来构建网站。我还使用了很多第三方库。其中一些是我的框架的"核心"库。我现在想用Composer来管理这些库。

因此,例如,我的框架默认带有Smarty模板引擎和一个名为 Monolog 的 Logger 类。

另一方面,使用我的框架的用户/开发人员也可以自己安装第三方库。就像他们想使用类似 SwiftMailer 的东西.或者使用 Twig 模板引擎代替 Smarty 。他们可以很容易地做到这一点。

目前我的应用程序结构如下:

/htdocs
  /System
    /Vendors
      /Smarty
      /Monolog
  /Controllers
  /Models
  /Views
  /Vendors
    /Swiftmailer
    /Twig

因此,所有"核心"库都放在System/Vendor目录中。框架默认带有这些库。

用户可以安装其他库,它们将被放置在 Web 文件夹根目录中的 Vendors 目录中。

如果我使用作曲家,我可以轻松安装SwiftMailerTwig等库。作曲家会自动将这些库安装到htdocs/Vendors目录中。

但是htdocs/System/Vendors目录中的库呢?我可以用作曲家管理Vendors目录吗?还是应该安装两个作曲家?所以一个在我的网络目录 (htdocs) 的根目录中,一个在System目录中?

还是我根本不应该对System/Vendors文件夹中的库使用作曲家?

我不确定如何管理这两个Vendors目录。对此的最佳实践是什么?

您的代码属于您的版本控制系统,并且应该得到一个声明代码自动加载的composer.json - 并且应该提及您是否还需要第三方代码 - 以及所需的版本。

不应在自己的代码库中包含第三方代码。如果你这样做,事情会变得更加复杂。

例如,如果有人使用您的框架,并且决定使用与您内部不同的 Smarty 版本,则不应忽视此版本冲突。因此,如果您只自己定义 Smarty 的自动加载,您不会阻止任何人在自己的软件中包含 Smarty 依赖项。现在可能会发生以下两种情况之一:要么首先执行您自己的 Smarty 自动加载,要么首先执行另一个 Smarty 自动加载。无论哪种方式,事情都会破裂,而不会留下出错的痕迹。在最坏的情况下,具有询问版本号功能的类被正确加载,其他任何东西都会搞砸......

因此,正确的方法是仅将这些第三方库嵌入Composer,而不将它们包含在您自己的代码库中。这也将减少框架的下载大小。从这个开始,世界将看到你已经使用了哪些库,Composer 可以检测版本冲突并提醒其他试图混合不兼容版本的开发人员。或者可以帮助仅获取该库的一个版本而不是两个版本(减小文件大小,自动加载时没有歧义)。

我建议只使用一个供应商文件夹,为什么要将它们分开?

我还想建议将框架本身与项目分离。我会为框架创建一个包,并在项目中要求。Composer 将处理所有依赖项,并将在项目的 vendor 目录中为项目安装所有内容。

相关内容

  • 没有找到相关文章

最新更新