实现了个输入命令创建文件、执行git的node脚本,大杂烩,将用过的点子收集了一下:
/ dabao.js
const {
execSync} = require('child_process'); //执行脚本代码
const chalk = require('chalk'); //颜色插件
const inquirer = require('inquirer'); //用户交互插件(需要install)
const os = require('os'); //操作系统
const ora = require('ora'); //状态样式插件
const fs = require('fs'); //文件系统
process.stdout.write('abcded \n\n11')//与console基本相同,一点细节不一样,如最后没自动加换行符
process.argv.map((item)=>{
//获取指令参数 如 node dabao.js ok -haha 1.node执行程序地址 2.被执行文件地址 3~.指令参数
if(item.indexOf('ok') > -1){
console.log('ok 命中')
}
})
const spinner = ora('Loading unicorns').start();
setTimeout(() => {
spinner.color = 'yellow';
spinner.text = 'Loading rainbows';
}, 1000);
setTimeout(() => {
spinner.stop()
},2500)
inquirer.prompt([//用户界面交互
{
type: 'confirm',
name: 'confirm',
message: 'sure to package?',
}
]).then(answers1 => {
console.log(answers1)
if(answers1.confirm){
inquirer.prompt([//用户界面交互
{
type: 'Input',
name: 'dirname',
message: 'write dirname:',
},
{
type: 'Input',
name: 'filename',
message: 'write filename:',
},
{
type: 'Input',
name: 'message',
message: 'write message:',
}
]).then(answers2 => {
if((answers2.dirname).indexOf('--c') != -1){
var _dirname = (answers2.dirname).slice(0 ,(answers2.dirname).indexOf(' '))
fs.exists(_dirname, function(exists) {
//判断文件是否存在
if(exists){
delDir(_dirname)
delDir('.git')
console.log(chalk.green('clean up...\n'));
}else{
console.log(chalk.red('dir is not exist.\n'));
}
})
}else{
if(answers2.dirname && answers2.filename && answers2.message){
fs.exists(answers2.dirname, function(exists) {
//判断文件是否存在
if(!exists){
doSomething(answers2.dirname,answers2.filename,answers2.message)
console.log(chalk.green('bundle done...\n'));
}else{
console.log(chalk.red('dir is already exist,or use "\'dirname\' --c" to delete the floder\n'));
}
})
}else{
console.log(chalk.red('cant left empty items.\n'));
}
}
})
}else{
console.log(chalk.red('you quit...\n'));
}
});
/函数存放点
function delDir(path){
let files = [];
if(fs.existsSync(path)){
files = fs.readdirSync(path);
files.forEach((file, index) => {
let curPath = path + "/" + file;
if(fs.statSync(curPath).isDirectory()){
delDir(curPath); //递归删除文件夹
} else {
fs.unlinkSync(curPath); //删除文件
}
});
fs.rmdirSync(path);
}
}
async function doSomething(dirName='./新建文件夹',fileName='writed.js',fileContent='console.warn("Created by dabao.js")'){
await fs.mkdir(dirName)
fs.writeFileSync(dirName+'/'+fileName, fileContent, 'utf8');
console.log(os.type())//获得操作系统
execSync(`git init`)//做你想做的
}
/
运行 node dabao.js
,执行效果如下
node.js api详询 http://nodejs.cn/api/