允许开源项目的用户将自己的文件添加到他们的副本中


Allow users of an opensourced project to add their own files to their copy

所以我正在创建一个半流行的开源项目,并正在寻找为其用户自定义副本的方法。

基本上,我对 Composer 的经验为零,对 git 子模块几乎没有经验。我将此文件结构推送到 git:

/ROOT
----/subdirectory/
---------/another.file.php
----/main.class.php
----/config.default.php
用户能够将

config.default.php复制到同一目录,将其重命名为config.php(并通过这样做覆盖默认配置值)将是理想的选择 - 我希望他们能够将自己的文件也添加到/subdirectory/,允许他们根据自己的独特要求扩展该工具。

我的问题是,当执行拉取(在 git 子模块的情况下)或 Composer 更新时,这些文件不会被修剪吗?如果是这样,我如何在尽可能少地为最终用户大惊小怪的情况下实现要求:

  1. 单个可选、可自由编辑的配置文件
  2. 可以包含用户创建的文件的两个目录
  3. 上述更改保留在用户自己的版本控制系统中,并且在获取新版本时不会删除。

提前感谢您的耐心等待。

如今,大多数应用程序框架/CMS所做的是将此过程拆分为两个包:

  • 一个包含大量代码的库包(例如symfony/symfony,Laravel/Framework),它将安装在供应商/
  • 一个"引导"包(例如Symfony/Framework-standard-Edition,Laravel/Laravel),其中包含一个用户可以启动的应用程序shell。这将包含默认配置和一个 composer.json,其中包括库包 + "require"部分中需要的任何其他内容。此引导包通常不会通过作曲家更新,因为它成为用户的应用程序/站点。因此,它应该包含尽可能少的代码,并且基本上只是配置。

您当前在类加载时加载用户配置:

if ( is_readable( KINT_DIR . 'config.php' ) ) {
    require KINT_DIR . 'config.php';
}

如果你添加了一个公共 setConfig() 属性,那么配置可以位于任何地方,并且你的默认值仍然有效(代码在我的头顶上):

Public static function setConfig($config) {
    if ( is_readable( $config ) ) {
        require $config;
    }
}