130 个稳定版本
使用旧 Rust 2015
3.1.23 | 2019年11月1日 |
---|---|
3.1.21 | 2019年7月4日 |
3.1.20 | 2019年1月16日 |
3.1.19 | 2018年12月4日 |
0.1.15 | 2017年5月9日 |
#146 在 模板引擎 中
203 每月下载次数
77KB
1.5K SLoC
project init (pi)
pi
是一个用于初始化项目的命令行工具。它使用 Rust 编写。
它旨在提供类似于 cookiecutter 的功能,但速度更快。
使用 pi 的原因
- 您想要自动化启动所有项目的流程。
- 您需要快速的项目初始化
使用 pi 而不是 cookiecutter 的原因
- 模板更小。在
.toml
中定义您需要的文件。 - 快速。pi 在渲染示例 vim 插件模板时比 cookiecutter 快 30 倍。
- pi 使用 mustache,一种无逻辑语言,作为模板。
- pi 可以在您的项目中初始化 darcs、pijul、mercurial 或 git 仓库
- pi 为许多语言提供了有偏见的模板
- pi 在 Rust 中可扩展
不使用 pi 而使用 cookiecutter 的原因
- cookiecutter 使用 jinja 模板,它们更为复杂。
- pi 更新,可能存在更多错误
- cookiecutter 在 Python 中可扩展
基准测试(使用 Haskell 的 bench)
工具 | 语言 | 时间(vim 示例插件) | 时间(Rust 库) |
---|---|---|---|
pi init | Rust | 10.10 毫秒 | 8.809 毫秒 |
pi new | Rust | 6.672 毫秒 | 8.653 毫秒 |
cookiecutter | Python | 317.1 毫秒 | 316.9 毫秒 |
安装
脚本
在命令提示符中输入以下内容
curl -LSfs https://japaric.github.io/trust/install.sh | sh -s -- --git vmchale/project-init
二进制发布
对于大多数用户来说,最简单的方法是下载预构建的二进制文件。您可以在 发布 页面上找到各种平台的二进制文件。
Cargo
首先,安装 cargo。然后
$ cargo install project_init
您需要使用夜间版才能使其正常工作;如果有疑问,请运行
rustup run nightly cargo install project_init
使用
pi
从 $HOME/.pi_templates/
以及当前目录读取。所以,如果你在 $HOME/.pi_templates/idris/
放置了一个模板,你就可以在任何地方使用以下方式初始化项目。
$ pi init idris treesod
这里有一个包含 pi 模板的仓库:此处。
你还可以使用内置的模板。
$ pi new haskell really-good-project
Finished initializing project in really-good-project/
或者从 github 获取模板。
$ pi git vmchale/haskell-ats ambitious-insane-project
示例
- haskell-ats - 用于 Haskell/ATS 多语言项目的模板。
- madlang-miso - 使用 Miso 和 Madlang 的前端模板。
- ats-makefile - 使用普通
Makefile
的 ATS 项目模板。
配置
全局配置通过 $HOME/.pi.toml
文件进行。以下是一个示例
license = "BSD3" # set default license to BSD3
version_control = "git" # initialize new repositories with git
version = "0.1.0" # start new projects at version 0.1.0
[author]
name = "Vanessa McHale"
email = "[email protected]"
github_username = "vmchale"
# put any custom keys you want under a [[user]] table
[[user]]
website = "https://vmchale.com"
项目特定的配置位于 $PROJECT_NAME/template.toml
。以下是一个 Vim 插件的示例
license = "BSD3" # overrides global value if set
with_readme = true # add README.md
[files]
files = ["syntax/{{ project }}.vim","plugin/{{ project }}.vim","doc/{{ project }}.txt"] # blank files
directories = ["doc","syntax","plugin"]
templates = ["vimball.txt"] # files to be processed
[config]
version = "0.1.0"
version_control = "darcs"
# put any custom keys you want below [[user]]
[[user]]
vim_org_username = "vmchale"
这将生成以下目录结构
vim-plugin
├── LICENSE
├── README.md
├── doc
│ └── vim-plugin.txt
├── plugin
│ └── vim-plugin.vim
├── syntax
│ └── vim-plugin.vim
└── vimball.txt
更详细的示例请见 此处。这是一个基于 递归方案生成器 的模板。
模板
pi
使用 mustache 进行模板化,通过 rustache 包。
你可以在 mustache 页面 找到示例和帮助,或者你可以查看 示例仓库。
依赖
~15–24MB
~431K SLoC