0

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

基本上我使用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. 以上更改保留在用户自己的版本控制系统中,并且在获取新版本时不会被删除。

提前感谢您的耐心等待。

4

2 回答 2

3

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

  • 一个包含大量代码的库包(例如 symfony/symfony、laravel/framework),将安装在 vendor/
  • 一个“引导”包(例如 symfony/framework-standard-edition、laravel/laravel),其中包含用户可以从其开始的应用程序外壳。这将包含默认配置和一个 composer.json,其中包括库包+“require”部分中需要的任何其他内容。此引导程序包通常不会通过 composer 更新,因为它会成为您用户的应用程序/站点。因此它应该包含尽可能少的代码,并且本质上只是配置。
于 2013-09-12T08:13:23.370 回答
0

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

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

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

Public static function setConfig($config) {
    if ( is_readable( $config ) ) {
        require $config;
    }
}
于 2014-01-11T12:35:06.617 回答