一个类似于vue、ract的脚手架,可以快速初始化一个基于hapi.js的项目目录结构。
准备工具
npm install commander log-update shelljs
- commander
- commander是一个很成熟的Node命令行交互工具。
- shelljs
- shelljs可以很方便的在Node中执行一些命令。
- log-update
- log-update通过在命令行中覆盖前面的内容,来渲染进度条、动画等。
开始
这里我们的目的是创建一个可以用于初始化一个项目结构的cli。
整体思路很简单:
- 编写一个基本的项目结构作为项目模板;
- 将该模板提交到Github上;
- 构建cli;
- 执行cli,拉取模板代码。
这里,我们直接使用一个现成的项目的git地址作为模板:git@github.com:imhxc/hapi-temp.git
构建cli代码
#! /usr/bin/env node
const program = require('commander');
const logUpdate = require('log-update');
const shell = rqeuire('shelljs');
program
.version('1.0.1')
.usage('app_name')
.description('构建hapi模板')
.parse(process.argv);
if (!program.args.length) {
program.help();
}
if (program.args.length === 1) {
shell.mkdir('-p', program.args[0]);
shell.cd(program.args[0]);
shell.exec('git init');
let i = 0;
const frames = ['-', '\\', '|', '/'];
const interval = setInterval(() => {
const frame = frames[i = ++i % frames.length];
logUpdate(`👉 👉 ${frame} initializing ${frame} 👈 👈`);
}, 50)
shell.exec('git pull git@github.com:imhxc/hapi-temp.git', (code) => {
clearInterval(interval);
if (code !== 0) {
console.log('Error! Try again');
shell.exit(1);
}
console.log('👏 👏 Completed! You are good to go! 👏 👏');
})
}
代码并不多,核心就是通过拉去一个模板代码到本地。
发布
在发布之前,我们需要配置一下我们的package.json
文件。
// package.json
....
"name": "create-hapi-cli", // npm依赖名称
"bin": {
"create-hapi-app": './bin/index.js'
},
"keywords": {
"hapi",
"node",
"cli"
}
....
在这里,我们主要配置了name
,bin
和keywords
字段,其中最关键的就是bin
:
这里我们指定了cli的调用名称以及执行的文件,这样,我们就可以通过下列方法来执行cli:
create-hapi-app my_app
。
构建好后,我们需要通过npm publish
来发布。如果你是第一次发布,可能需要添加--access public
参数:
npm publish --access public
发布成功后,我们就可以通过执行npm install create-hapi-cli -g
就可以安装到本地了,就可以调用create-hapi-app
命令了。