构建一个自己的cli

一个类似于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地址作为模板:[email protected]: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 [email protected]: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,binkeywords字段,其中最关键的就是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命令了。

项目地址

你可能感兴趣的:(构建一个自己的cli)