创建个人脚手架cli的步骤全记录

参考文档:https://www.jb51.net/article/159892.htm

1. 首先需要一个npm的账号,这里不建议用个人账号,注册一个团队账号

脚手架取名 much-cli:寓意许多脚手架,希望前端和后端都能采用这个脚手架进行架构,实现单点维护,多点使用,同步升级等需求。

2. 创建一个目录 much-cli 在里面用npm进行初始化
npm init

如果不知道如何设定直接敲回车

这里需要点前置知识,写好脚手架会有一些必要的依赖需要了解

  • commander

这是用来编写指令和处理命令行的,具体用法参考如下

const program = require("commander");
// 定义指令
program
 .version('0.0.1')
 .command('init', 'Generate a new project from a template')
 .action(() => {
   // 回调函数
 })
// 解析命令行参数
program.parse(process.argv);
  • inquirer

这是个强大的交互式命令行工具,具体用法参考如下

const inquirer = require('inquirer');
inquirer
 .prompt([
   // 一些交互式的问题
 ])
 .then(answers => {
   // 回调函数,answers 就是用户输入的内容,是个对象
 });

想象一下我们用 vue init webpack project-name 之后是不是会有几个交互问题,问你文件名啊、作者啊、描述啊、要不要用 eslint 啊等等之类的,就是用这个来写的。

  • chalk

这是用来修改控制台输出内容样式的,比如颜色啊,具体用法如下:

const chalk = require('chalk');
console.log(chalk.green('success'));
console.log(chalk.red('error'));
  • ora

这是一个好看的加载,就是你下载的时候会有个转圈圈的那种效果,用法如下:

const ora = require('ora')
let spinner = ora('downloading template ...')
spinner.start()
  • download-git-repo

看名字很明显了,这是用来下载远程模板的,支持 GitHub、 GitLab 和 Bitbucket 等,用法如下:

const download = require('download-git-repo')
download(repository, destination, options, callback)

其中 repository 是远程仓库地址;destination 是存放下载的文件路径,也可以直接写文件名,默认就是当前目录;options 是一些选项,比如 { clone:boolean } 表示用 http download 还是 git clone 的形式下载。

3. 安装依赖

有了以上知识之后就能先安装一些依赖

npm install commander inquirer chalk ora download-git-repo

会自动安装node依赖,并自动把版本写入package.json里面

4. 开始编写脚手架

新建一个 bin 文件夹,并在 bin 目录下新建一个无后缀名的 much 文件,并写上:

//much文件
#!/usr/bin/env node
console.log('hello much');

这个文件就是我们整个脚手架的入口文件,我们用 node ./bin/xr 运行一下,就能在控制台打印出 hello much

% node ./bin/much 
hello much
4.1 bin文件夹初始化

目前文件夹内只有一个入口文件 much ,我们来编写它,让它实现简单的命令功能

#!/usr/bin/env node

// console.log('hello much')
const Program = require('commander');
const _package = require('../package.json')

// 定义名字
// 定义版本
// 定义用法
// 定义几个命令
Program
  .name(_package.name)
  .version(_package.version)
  .usage('<command> [options]')
  .command('add', '添加一个新模板')
  .command('delete', '删除一个新模板')
  .command('list', '列出所有模板')
  .command('init', '从模板初始化一个新项目')

// 解析命令行参数
Program.parse(process.argv)

这个文件的作用就是用来定义指令,现在我们用 node ./bin/much 来看下效果

% node ./bin/much
Usage: much-cli <command> [options]

Options:
  -V, --version   output the version number
  -h, --help      display help for command

Commands:
  add             添加一个新模板
  delete          删除一个新模板
  list            列出所有模板
  init            从模板初始化一个新项目
  help [command]  display help for command

当然如果觉得 node ./bin/much 这个命令太麻烦的话,可以在package.json中添加以下内容

// bin 用来指定每个命令所对应的可执行文件的位置
"bin": {
  "much-cli": "/bin/much"
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容