一個(gè)類似于vue、ract的腳手架,可以快速初始化一個(gè)基于hapi.js的項(xiàng)目目錄結(jié)構(gòu)。
準(zhǔn)備工具
npm install commander log-update shelljs
- commander
- commander是一個(gè)很成熟的Node命令行交互工具。
- shelljs
- shelljs可以很方便的在Node中執(zhí)行一些命令。
- log-update
- log-update通過在命令行中覆蓋前面的內(nèi)容,來渲染進(jìn)度條、動(dòng)畫等。
開始
這里我們的目的是創(chuàng)建一個(gè)可以用于初始化一個(gè)項(xiàng)目結(jié)構(gòu)的cli。
整體思路很簡單:
- 編寫一個(gè)基本的項(xiàng)目結(jié)構(gòu)作為項(xiàng)目模板;
- 將該模板提交到Github上;
- 構(gòu)建cli;
- 執(zhí)行cli,拉取模板代碼。
這里,我們直接使用一個(gè)現(xiàn)成的項(xiàng)目的git地址作為模板:git@github.com:imhxc/hapi-temp.git
構(gòu)建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('構(gòu)建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! ?? ??');
})
}
代碼并不多,核心就是通過拉去一個(gè)模板代碼到本地。
發(fā)布
在發(fā)布之前,我們需要配置一下我們的package.json文件。
// package.json
....
"name": "create-hapi-cli", // npm依賴名稱
"bin": {
"create-hapi-app": './bin/index.js'
},
"keywords": {
"hapi",
"node",
"cli"
}
....
在這里,我們主要配置了name,bin和keywords字段,其中最關(guān)鍵的就是bin:
這里我們指定了cli的調(diào)用名稱以及執(zhí)行的文件,這樣,我們就可以通過下列方法來執(zhí)行cli:
create-hapi-app my_app。
構(gòu)建好后,我們需要通過npm publish來發(fā)布。如果你是第一次發(fā)布,可能需要添加--access public參數(shù):
npm publish --access public
發(fā)布成功后,我們就可以通過執(zhí)行npm install create-hapi-cli -g就可以安裝到本地了,就可以調(diào)用create-hapi-app命令了。