目前模版项目尚未开发完毕,后续会陆续添加。
可以自动化构建React, Vue, Jquery, Js类库, Koa/Express/Egg项目, Plugin等等多种项目结构初始化,还可以为已存在项目生成可直接使用的单个或多个插件配置.
$ npm i @dking/hasaki-cli -g
$ hasaki-cli init -d ./react-demo
$ hasaki-cli install https://github.com/JohnApache/hasaki-template/tree/master/react -d ./react-demo
$ hasaki-cli gen readme,eslint,babel,webpack --installed react
$ hasaki-cli template --list
-
init | i 通过选择一个适合的模版来快速初始化项目, 可选配置如下
- -d, --out-dir 指定输出目录,默认为当前执行环境目录.
- --ignore <pattern,...,parttern> 指定需要忽略的文件.
- --exclude <pattern,...,parttern> 指定不需要ejs渲染的文件.
- --include <pattern,...,parttern> 指定需要用ejs渲染的文件,一般配合exclude使用.
- -c, --config 指定需要读取的模版项目配置文件名称, 默认为 .hasakirc.js.
- -h, --help 输出帮助文档
$ hasaki-cli init -d ./react-demo
-
install 和init效果相仿,用远端地址来代替内置模版选项, 可选配置如下
- -d, --out-dir 指定输出目录,默认为当前执行环境目录.
- --ignore <pattern,...,parttern> 指定需要忽略的文件.
- --exclude <pattern,...,parttern> 指定不需要ejs渲染的文件.
- --include <pattern,...,parttern> 指定需要用ejs渲染的文件,一般配合exclude使用.
- -c, --config 指定需要读取的模版项目配置文件名称, 默认为 .hasakirc.js.
- -h, --help 输出帮助文档
$ hasaki-cli init -d ./react-demo
-
template | t 默认内置模版列表CRUD的命令,用于自定义模版列表,可选配置如下
- --list 展示当前模版列表.
- --add 添加模版.
- --update 更新模版.
- --delete 删除模版.
- --clear 清空模版.
- --reset 重置模版.
- -h, --help 输出帮助文档
$ hasaki-cli template --list $ hasaki-cli template --add $ hasaki-cli template --reset
-
gen | generate [plugin,...,plugin] 为已存在的项目快速添加插件所需要的配置文件或其他相关文件
- -d, --out-dir 指定输出目录,默认为当前目录.
- --installed <plugin,...,plugin> 指定当前项目已经安装的插件环境.
- -f, --force-cover 强制覆盖文件.
- -h, --help 输出帮助文档
支持的插件配置列表如下: readme, eslint, mocha, jest, babel, webpack, rollup, gulp, lerna, typescript.
额外可配置已安装配置: react, vue....
$ hasaki-cli gen eslint,readme,mocha,babel,rollup,typepscript -d ./config --installed react
.hasakirc.js 文件是存在于模版项目根目录的配置文件,hasaki-cli 会尝试动态读取加载该文件,并按照该配置文件加载过滤筛选文件,并按照 ejs 规则读取文件,如果没有该文件则不会按照任何规则,全输出目标文件,这样的配置文件让 hasaki-cli 拥有可以定制模版项目的能力,可以让用户自己定制模版项目不同情况的不同输出,适用于任何 GitHub 项目, 非常灵活.
// .hasakirc.js
module.exports = {
parseExclude: [],
parseInclude: [],
ignore: [],
question: [{
type: 'confirm',
message: 'use ts?',
name: 'useTs',
default: true
}],
screener(answers) {
const { useTs } = answers;
const include = [];
const exclude = [];
if(useTs) {
exclude.push({
path: './src/index.js'
})
}else {
exclude.push({
path: './src/index.ts'
}, {
path: './tsconfig.json'
})
}
return { include, exclude }
}
}
-
parseExclude
- 参数含义: 指定不需要ejs过滤的文件,防止项目中原本就存在 ejs 模版文件
- 参数类型: Array<Rule | RegExp>
-
parseInclude
- 参数含义: 指定需要ejs过滤的文件,配合 parseExclude 配置一起使用
- 参数类型: Array<Rule | RegExp>
-
ignore
- 参数含义: 指定需要忽略的文件
- 参数类型: Array<Rule | RegExp>
-
question
-
screener
-
参数含义: 筛选器, 该参数是一个函数,它接收了 question 的 answer 作为参数,返回 {exclude: Array<Rule | RegExp>, include: Array<Rule | RegExp>}, 可以根据不同的 answer, 返回不同的结果来筛选文件。
-
参数类型: Function(answer: Answer): {
exclude: Array<Rule | RegExp>; // 需要排除的文件 include: Array<Rule | RegExp>; // 需要包含的文件,配合 exclude 一起使用
};
-
- 多项选择默认以 "," 分割多个选项
- pattern 表示目标项目的相对路径 正则或Rule, Rule 为 { path?: string; match?: RegExp; }对象, path 为文件相对路径,match为正则匹配, path 和 match 只需要一个即可
- 远端模版配置文件 .hasakirc.js 文件必须通过 commonjs 格式导出配置
- 配置 .hasakirc.js 文件编写 question 规则必须和 inquirer 规则相同, 否则会解析错误
欢迎创建issue 或者 pr here.