1 个不稳定版本
0.0.2 | 2020年3月23日 |
---|---|
0.0.1 |
|
#1 in #fern
19KB
385 行
Fern
fern
不是一个构建工具,它更像是命令运行器。它为你的单一代码库的不同部分提供了一个统一接口来运行特定任务。可以参考 Jeff Ramnani 的这篇博客来了解核心思想 项目构建工具。
唯一的一个技巧是,就像现实中的蕨类植物一样,它是分形/递归的。
上下文 - 合适的文件
假设你有一个较大的项目,由多个较小的部分组成。这些部分可能使用不同的语言编写。比如,你的后端可能用 Rust 编写,邮件服务是一个 Python 应用程序,而前端是用 ELM 编写的。
现在,你可以编写一个 Makefile
来协调所有应用程序,在正确的文件夹中启动 cargo
、pip
和 elm
。我觉得烦人的是,一个 Makefile
规则了所有事情。这个 Makefile
混合了多种语言和构建工具的关注点,并且它需要用文件夹做些聪明的事情,比如 cd ui && npm install
。
fern
有所不同——并且比 make
弱得多——但它更简单。 fern
可以找到散布在代码库中的 fern.yaml
文件。在我们的例子中,我们会为 Rust 后端、ELM 前端和单独的 Python 各有一个。如果你想知道 fern
会考虑哪些文件,请运行 fern leaves
。因为蕨类植物有无数“叶子”😄。
叶子构成蕨类植物
我把 fern.yaml
文件称为 leaves
,这也是列出它们的命令的名称。在这样一个蕨类植物的 fern.yaml
文件中,你可以定义以下 4 个目标之一
fmt
用于任何与格式化相关的内容build
用于与构建应用程序相关的一切test
用于运行任何类型的测试check
用于类型检查或构建检查等
您可以编写类似这样的单行
fmt: cargo fmt
test: cargo test
或者使用列表执行多个步骤
fmt:
- npm run fmt
- prettier --write src/css/*.css
test: npm test
check:
- tsc
- prettier --check {src,test}/**/*.tsx
- prettier --check src/css/*.css
就是这样。目前无法描述相互依赖关系(尚不支持)或更复杂的功能。
运行它
命令与您在 fern 文件中编写的内容完全匹配
fern fmt
用于与格式化相关的一切fern build
用于与构建应用程序相关的一切fern test
用于运行任何类型的测试fern check
用于类型检查或构建检查等
增加了一个命令
leaves
显示它将找到哪些 fern
文件。您可以提供参数 -p
或 --porcelain
以获取单行中的所有文件,这对于在 vim 中一次性打开所有文件很有用
vim -p $(fern leaves -p)
播种 fern 和配置
使用 fern
应尽可能少地需要配置,特别是由于其功能集很小。不过,有一个功能需要全局配置文件: fern seed $name
。 seed
会为您创建一个基于 $name
和全局配置的 fern.yaml
文件。配置文件预期在 $HOME/.fern.config.yaml
($HOME
会根据操作系统而变化)中,但您可以使用环境变量 FERN_CONFIG
来更改它。
以下是一个示例配置文件
seeds:
rust:
fmt: cargo fmt
test: cargo test
build: argo build --release
elixir:
fmt: mix format .
test: mix test
在 seeds
键下,您可以命名类似于 fern.yaml
文件的块。然后,运行 fern seed rust
将将此块复制到本地 fern.yaml
。如果您有多个需要类似配置的项目,这将很有用。
安装和贡献
目前,使用它的最佳方法是克隆源代码,并使用最新的 Rust 编译它。
贡献非常欢迎
- 目前还没有测试,所以您可以随意编写任何测试
- 您认为有哪些轻量级的功能可能会使
fern
更有用?请打开问题或 PR
依赖项
~6–15MB
~186K SLoC