11 个版本 (6 个重大更新)
0.7.1 | 2023 年 3 月 27 日 |
---|---|
0.7.0 | 2023 年 2 月 4 日 |
0.6.0 | 2023 年 2 月 3 日 |
0.5.0 | 2023 年 2 月 1 日 |
0.1.1 | 2023 年 1 月 29 日 |
#2806 in 命令行工具
每月 55 次下载
24KB
485 代码行
onecfg
一个配置文件生成所有配置。
onecfg
为使用多个具有相互依赖配置的工具的项目提供了一种有效的配置文件管理解决方案。它引入了 onecfg 文件 的概念,这些是基于 JSON 的文件,用于存储生成和定制不同工具配置文件所需的信息。这些 onecfg 文件可以在任何位置共享、扩展并通过 HTTPS 加载,使用户能够创建满足特定需求的定制配置。
这种方法解决了两个主要挑战:首先,它消除了配置文件的重复性,减少了在项目之间手动更新的需求。其次,它简化了管理不同工具组合时配置的复杂性。
安装
您可以使用 Cargo 安装 onecfg
cargo install onecfg
使用方法
在您可以使用 onecfg
生成配置文件之前,您需要在项目的根目录中创建一个 onecfg.json
文件。此文件将定义如何生成配置文件以及您想进行的任何自定义。
要生成配置文件,请使用以下命令
onecfg onecfg.json
要快速开始使用 onecfg
,您可以使用 onecfg-lib
库。这是一个专为配置 TypeScript 和 Rust 项目设计的 onecfg 文件集合。通过扩展这些预定义的 onecfg 文件,您可以轻松设置项目,而无需从头开始创建自己的配置。
要使用 onecfg-lib
库,只需将所需的 onecfg 文件包含在项目 onecfg.json
文件的 extends
部分即可。例如
{
"extends": [
"https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-editorconfig.json",
"https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-git.json",
"https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-prettier.json",
"https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-vscode.json"
]
}
在此示例中,onecfg.json
文件扩展了来自 onecfg-lib
库的四个不同的 onecfg 文件,这些文件专门用于配置 EditorConfig、Git、Prettier 和 Visual Studio Code。通过扩展这些文件,您的项目将配置为每个工具的推荐配置。
您可以在 onecfg-lib
仓库 中找到更多针对 TypeScript 和 Rust 项目的 onecfg 文件。
注意:您可以使用JSON Schema来验证您的onecfg文件或在编辑器中启用自动完成。
定义要生成的配置文件格式
在您的onecfg.json
文件中,您可以定义配置文件的格式,如下所示
{
"defines": {
".gitignore": {"format": "ignorefile"},
".prettierrc.json": {"format": "json"}
}
}
请注意,只有直接或间接定义在扩展onecfg文件中的配置文件才能生成和修补。在特定路径下的配置文件应在所有扩展onecfg文件中只定义一次。
在扩展onecfg文件时,确保没有对同一文件路径的冲突定义。如果发生冲突,您可能需要修改您的自定义onecfg.json
文件或创建一个新的onecfg文件以解决问题。
声明特定于某些配置文件的修补程序
您可以在您的onecfg.json
文件中声明针对特定配置文件的修补程序
{
"patches": {
".gitignore": [{"value": ["/dist"]}],
".prettierrc.json": [{"value": {"printWidth": 80, "singleQuote": true}}]
}
}
理解这一点至关重要:未定义文件的修补程序将没有效果,并且不会对配置过程产生负面影响。这有一个优点,即允许您规划可能未在特定项目中使用的工具的集成修补程序。如果未使用该工具,则不会应用相应的配置,从而防止生成不必要的配置。
配置格式
onecfg
支持多种配置格式,包括text
、json
、toml
、yaml
和ignorefile
。您可以在onecfg.json文件的定义部分中定义配置文件的格式,并提供修补程序以自定义值。
text
{
"defines": {
"test.txt": {"format": "text"}
},
"patches": {
"test.txt": [{"value": "foo"}, {"value": "bar"}]
}
}
bar
json
{
"defines": {
"test.json": {"format": "json"}
},
"patches": {
"test.json": [{"value": {"foo": "bar"}}, {"value": {"baz": "qux"}}]
}
}
{
"baz": "qux",
"foo": "bar"
}
toml
{
"defines": {
"test.toml": {"format": "toml"}
},
"patches": {
"test.toml": [{"value": {"foo": "bar"}}, {"value": {"baz": "qux"}}]
}
}
baz = "qux"
foo = "bar"
yaml
{
"defines": {
"test.yml": {"format": "yaml"}
},
"patches": {
"test.yml": [{"value": {"foo": "bar"}}, {"value": {"baz": "qux"}}]
}
}
baz: qux
foo: bar
ignorefile
{
"defines": {
".testignore": {"format": "ignorefile"}
},
"patches": {
".testignore": [{"value": ["foo", "bar"]}, {"value": ["baz"]}]
}
}
foo
bar
baz
许可协议
许可协议为以下之一
- Apache License,版本2.0(LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可协议(LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确说明,否则您提交给作品以供包含的任何贡献,根据Apache-2.0许可协议定义,应按上述方式双许可,不附加任何额外条款或条件。
依赖关系
~8–24MB
~364K SLoC