vue - 如何打造属于自己的CLI脚手架工具?

有哪些CLI?

Vue-cli

Gulp

create-react-app

webpack

yeoman

express-generator

...

为什么需要CLI?

减少重复性工作。

根据动态命令更方便的生成开发环境。

团队协同,效率高。

我们要达到的设计?

zmz-vuecli init demo

zmz-vuecli list

最终的效果图

image.png

步骤:

一. 新建文件,进入文件夹 

npm init

二. 在package.json文件夹下加入:

 bin:{            
   "zmz-vuecli": "./bin/index.js"             
 }

三.在目录下新建文件夹 bin,在bin下新建index.js

image.png

四. 执行命令:

   npm link

五.在index.js文件夹下写入:

第一行是检测是否安装node

 

#!/usr/bin/env node               
//1.获取用户输入的命令           
console.log(process.argv)

六. 在控制台执行:

zmz-vuecli

便可以看见控制台有这个zmz-vuecli命令了。

七. 代码(我都有注释):

#!/usr/bin/env node    
//逻辑:
  //1.获取用户输入的命令 console.log(process.argv)
  //2.根据命令进行操作。。。。。
// 处理 用户 命令 比如: zmz-vuecli -version 
        //处理用户命令
const program = require('commander'),
        //下载
       download = require('download-git-repo'),
       //模板引擎当作字符串
       handlebars = require('handlebars'),
       // 交互
       inquirer = require('inquirer'),
       //视觉美化
       ora = require('ora'),
       //字体颜色
       chalk = require('chalk'),
       //路径
       fs = require('fs'),
       //对勾优化
       logSymbols = require('log-symbols'),
       //自定义字符画
       chars = [
        "complete",
        "~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
        "~~~~~~~~~~ qq: 1028470211 ~~~~~~~~~~",
        "~~~~~~~email:jiawenguang0213@sina.com~~~~~~",
        "~~~~~~~~~  www.zhuimengzhu.com ~~~~~~~~",
        "~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
    ]
//查看版本号
program
  .version('1.0.0')
//设计命令 初始化命令
//zmz-vuecli init demo
program
  .command('init <template>')
  .description('Initializing BFF architecture')
  .action(function(template){
    download('github:jiawenguang/zmz-vuecli', template, function (err) {
        const spinner = ora(chalk.green('Download in progress...')).start();
        if(err){
            spinner.fail(chalk.red('Download failed...'));
            return false
        }
        spinner.succeed();
        
        inquirer.prompt([{
          type:'input',
          name:'name',
          message:'Please click Enter?'
        }]).then(answers => {
            const packagePath = `${template}/package.json`;
            const packageJson =  fs.readFileSync(packagePath,'utf-8');
            const packageResult =  handlebars.compile(packageJson)(answers);
            fs.writeFileSync(packagePath,packageResult);
            console.log(logSymbols.success,chalk.green(chars.join('\n')))
           
        });
      })
  });
//设计命令 查看所有帮助
//zmz-vuecli list
program
  .command('list')
  .description('View all commands') 
  .action(function(){
    console.log('mode');
  })
//设计命令 其他命令处理
program
  .command('*')
  .action(function(env){
    console.log('No operation was found.', env);
  });
program.parse(process.argv);

七.发布(需要注册一个npm号):

1. npm login      
2. npm publish

八. 删除

1、npm unpublish zmz-vuecli@1.0.0 删除某个版本
2、npm unpublish zmz-vuecli --force 删除整个npm市场的包

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值