0. 整个流程
1. commander.js(制作cli工具)
1 .action回调函数接受的参数和输入的一致,
- 如果输入的是之前option中定义的格式,则会帮你自动放到Command对象里,
- 如果自定义参数和option定义的乱序输入,Command对象会自动放到antion回调函数的最后一位
- []表示可选参数, <>表示必输参数
- option有两个定义
option(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command;
option(flags: string, description?: string, defaultValue?: any): Command;
- option里定义的前面最多加三个‘-’,多加了就报错了 XD
var program = require("commander");
program
.version("0.0.1")
.usage("[options] [dir]")
.description("a test cli program")
.option("-n, --name <name>", "your name", "GK")
.option("-a, --age <age>", "your age", "22")
.option("-e, --enjoy [enjoy]")
.action((ccc, options) => {
console.log(1111111111, ccc);
console.log(222222222222222, options);
});
program.parse(process.argv);
2. node.js readline(与用户在终端的输入进行交互)
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('你如何看待 Node.js 中文网?', (answer) => {
// TODO:将答案记录在数据库中。
console.log(`感谢您的宝贵意见:${answer}`);
rl.close();
});
function confirm(msg, callback) {
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question(msg, function (input) {
rl.close();
callback(/^y|yes|ok|true$/i.test(input));
});
}
3. chalk.js 控制打印的字体颜色字体样式
4. cross-spawn.js
使用spawn创建子进程执行命令
5. 清空控制台输出(感觉就和手动输入了clear一样)
\x1B ASCII对应到 ESC
Linux ANSI 控制码
这几个命令大概的意思是:
[2J 清除控制台
[H 将光标移至最顶部
process.stdout.write(
process.platform === 'win32' ? '\x1B[2J\x1B[0f' : '\x1B[2J\x1B[3J\x1B[H'
);
判断操作系统 process.platform/os.platform()
6. mkdirp.js
和mkdir -p 一样,递归创建目录,层级的;
7. path.resolve
返回一个绝对路径的字符串
const path = require('path')
// /表示根路径
console.log(path.resolve('/foo/bar', './baz'))
// 输出 D:\foo\bar\baz
// 什么都不加的情况
console.log(path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif'))
// 输出 工作目录+\wwwroot\static_files\gif\image.gif
8. fs.writeFileSync
在没有改文件时就自动创建
9. fs-extra.js
10. dedent.js
去处多行字符串中的缩进
const dedent = require('dedent');
console.log(dedent(`Line #1
Line #2
Line #3`))
/*
Line #1
Line #2
Line #3
*/
11.读JSON文件
function readJSONFile (...restPath) {
let result = []
try {
result = JSON.parse(fs.readFileSync(path.resolve.apply(null, restPath)));
} catch(e) {
throw e;
}
return result;
}
网友评论