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模板引擎

Download history 24/week @ 2024-03-08 4/week @ 2024-03-15 12/week @ 2024-03-29 2/week @ 2024-04-05

203 每月下载次数

自定义许可

77KB
1.5K SLoC

Rust 1K SLoC // 0.1% comments Cabal 186 SLoC // 0.0% comments Haskell 112 SLoC // 0.1% comments Shell 75 SLoC // 0.1% comments PureScript 29 SLoC // 0.1% comments PowerShell 17 SLoC // 0.1% comments Python 13 SLoC Dhall 12 SLoC Idris 12 SLoC // 0.4% comments Julia 7 SLoC Madlang 5 SLoC Forge Config 2 SLoC ATS 2 SLoC

project init (pi)

Build Status Windows build status

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

示例

配置

全局配置通过 $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