所以我正在创建一个半流行的开源项目,并正在寻找为其用户自定义副本的方法。
基本上,我对 Composer 的经验为零,对 git 子模块几乎没有经验。我将此文件结构推送到 git:
/ROOT
----/subdirectory/
---------/another.file.php
----/main.class.php
----/config.default.php
用户能够将config.default.php
复制到同一目录,将其重命名为config.php
(并通过这样做覆盖默认配置值)将是理想的选择 - 我希望他们能够将自己的文件也添加到/subdirectory/
,允许他们根据自己的独特要求扩展该工具。
我的问题是,当执行拉取(在 git 子模块的情况下)或 Composer 更新时,这些文件不会被修剪吗?如果是这样,我如何在尽可能少地为最终用户大惊小怪的情况下实现要求:
- 单个可选、可自由编辑的配置文件
- 可以包含用户创建的文件的两个目录
- 上述更改保留在用户自己的版本控制系统中,并且在获取新版本时不会删除。
提前感谢您的耐心等待。
如今,大多数应用程序框架/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;
}
}