手写cli得到生成mpvue页面模板的cmd全局命令
- 创建文件夹,并执行
npm init -f
- 在生成的
package.json文件中加入"name": "binary.js",name是想要执行的全局命令,之后用mpcli代替
- 创建
binary.js文件和data文件
'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;
}
'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'))
}
]
};
- 以管理员权限进入
cmd,执行npm link命令,会在${npm prefix}下生成两个脚本文件mpcli和mpcli.cmd;会在${npm prefix}/node_modules中生成mpcli文件夹
- 找到
系统变量中node的全局路径,将两个脚本文件放入全局路径下,将mpcli文件夹放入全局路径下的node_modules文件夹中
- 删除的时候再目录下执行
npm unlink mpcli -g
- www.jianshu.com/p/50129ca8e…
blog.csdn.net/juhaotian/a…