构建一个自己的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地址作为模板: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,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命令了。

项目地址

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,309评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,395评论 25 709
  • 小城雨夜 ——瘦桶 小城很小 小城似过去许多的日子 小城窗前的雨水比昨夜更惆怅 天空很空 今夜没有星空 今夜不再仰...
    瘦桶阅读 397评论 1 10
  • 很多家长都参加过孩子的家长会,没有参加过的估计你还没有资格当家长。很多男人说他们的压力大,都没时间参加孩子的家长会...
    花语心理成长阅读 541评论 0 2
  • 最近很流行这句话,灵魂有香气。 什么叫做灵魂有香气? 我想,我的定义第一就是:真实。 一个虚伪、不能真诚表露自己的...
    小淑爱酷仔阅读 764评论 0 1

友情链接更多精彩内容