19-08-18 cmd全局命令手写cli

259 阅读1分钟

手写cli得到生成mpvue页面模板的cmd全局命令

  1. 创建文件夹,并执行npm init -f
  2. 在生成的package.json文件中加入"name": "binary.js"name是想要执行的全局命令,之后用mpcli代替
  3. 创建binary.js文件和data文件
#!/usr/bin/env node

'use strict'
const fs = require('fs');
const path = require('path');
const structure = require('./data').items;
// dos 窗口输入--->mpcli init blog ,init属于 第二个参数
let args = process.argv.slice(2);
let cmd =args[0];
switch (cmd) {
    case 'init':
        let projectName = args[1];
        var rootName = `./${projectName}`;   //首次操作,假设此文件目录不存在
        fs.mkdir(rootName,(err)=>{      //创建目录
            if(err){
                throw  err;
            }
            structure.forEach((item)=>{  //遍历创建相应类型的文件 or 目录
                let type = item.type;
                if(type === 'dir'){
                    fs.mkdir(`${rootName}/${item.name}`,(err) =>{
                        if(err){
                            throw err;
                        }
                    })
                    console.log(`${rootName}/${item.name}`);
                }else if (type === 'file') {
                    fs.writeFile(`${rootName}/${item.name}`,item.content,(err) =>{
                        if(err){
                            console.log('failed')
                            throw err;
                        }
                    })
                    console.log(`${rootName}/${item.name}`);
                }
            })
        })
        break;
    case 'help':
        // TODO 
        break;
    case '--version':
        // TODO 
        break;
    case'-v':
        // TODO 
        break;
    default:
        console.log('Wrong support')
        break;
    }

//data 模板结构文件
'use strict';
const fs = require('fs');
const path = require('path');
module.exports = {
    items:[
        {
            name:'css',
            type:'dir', //目录
            items:[]
        },
        {
            name:'img',
            type:'dir'  //目录
        },
        {
            name:'js',
            type:'dir'  //目录
        },
        {
            name:'index.html',
            type:'file',  //文件
            content: fs.readFileSync(path.join(__dirname,'index.html'))  //同步读取index.html文件,执行命令的时候会帮我们将此文件也创建出来
        }
    ]
};
  1. 以管理员权限进入cmd,执行npm link命令,会在${npm prefix}下生成两个脚本文件mpclimpcli.cmd;会在${npm prefix}/node_modules中生成mpcli文件夹
  2. 找到系统变量中node的全局路径,将两个脚本文件放入全局路径下,将mpcli文件夹放入全局路径下的node_modules文件夹中
  3. 删除的时候再目录下执行npm unlink mpcli -g
  4. www.jianshu.com/p/50129ca8e… blog.csdn.net/juhaotian/a…