speike
v1.2.2
Published
Simple CLI for scaffolding Speike projects
Downloads
4
Readme
speike-cli
简单且通用的脚手架工具
安装
条件:Node.js >= 6.x
$ npm install -g speike
使用
$ speike init <template-name> <project-name>
例子:
$ speike init speike-template-thinkjs hao-project
上面的例子首先会从 haotech/speike-template-thinkjs 拉取模板,然后根据模板项目中根目录下 metadata.js 文件中 prompts
的配置使用 交互命令 获取一些信息,最后通过这些获取到的信息生成 hao-project
项目。
推荐模板
speike 提供了一些常用的,并且比较推荐的模板,这些模板目前在 haotech 组织下,全部以 speike-template
开头命名,所有推荐模板均可以用 speike init <template-name> <project-name>
这行命令使用并生成项目,你也可以使用 speike list
命令来查看当前有哪些可用的模板。
推荐模板:
- speike-template-thinkjs 功能齐全的前后端分离项目,该项目使用 Thinkjs 3.x + Vue + Vuex 架构。
自定义模板
推荐的模板并不能覆盖所有需求场景,所以用户可以编写自己的自定义模板,只需要遵循一定的规则即可。
当编写好自定义的模板之后,可以通过下面的命令来使用该模板。
$ speike init username/repo my-project
模板下载功能是基于 download-git-repo 开发,所以可以使用 download-git-repo
的全部语法。
例如拉取模板的指定分支:
$ speike init owner/name#my-branch
如果您想从私有仓库下载模板,请使用 -c
或 --clone
,speike将使用 git clone
来下来您的模板。
仓库支持:
- Github -
github:owner/name
or simplyowner/name
- GitLab -
gitlab:owner/name
- Bitbucket -
bitbucket:owner/name
编写自定义模板
- 模板仓库根目录必须有一个
template
文件夹 - 模板仓库根目录下必须有一个
metadata
文件,metadata.js
或者metadata.json
二选一,metadata
文件必须包含以下字段:prompts
:用于配置命令行如何与人进行交互,从而收集一些模板需要的信息
prompts
metadata 文件中的 prompts
字段必须是一个 Object
包含了用户提示信息,prompts
中的每个key会对应生成一个变量,可以在 template
文件夹内的模板中使用,就像 ejs, jade, nunjucks 中传入模板中的变量一样(事实上就是使用模板引擎来实现的),而每个key对应的 value
是一个 Inquirer.js question object,例如:
{
"prompts": {
"name": {
"type": "string",
"required": true,
"message": "Project name"
}
}
}
当所有与用户间的询问完成之后,会进行模板渲染,这里使用的模板引擎是 Handlebars,与用户交互完毕后拿到的数据会传入到模板引擎中~
所以在模板引擎中可以使用 Handlebars 的所有语法,例如 {{expression}}
, if
等。
question object
question object 是一个hash
,包含了一些与问题相关的值
- type: (String) 提示类型。默认为
input
,可用类型:input
,confirm
,rawlist
,expand
,checkbox
,password
,editor
- message: (String) 在命令行中显示的问题
- default: (String|Number|Array) 问题的默认值
- choices: (Array) 值可以是
string
,也可以是Object
,Object
包含name
,value
,short
,name
是显示在终端列表中的名字,value
是保存在hash
中的值,short
是选择后显示的值。
更多信息请查看 Inquirer.js 中的详细说明~
skipCompile
metadata 文件中的 skipCompile
字段可以是 Array
也可以是 String
,值为 minimatch 的匹配规则,例如:
{
"skipCompile": [
"src/**/*.vue"
]
}
被匹配到的文件会跳过 **模板编译**这一步。
所以被跳过的文件并不会读取到 `prompts` 中的值。