# 开始
大家经常使用的 create-react-app, vue-cli 都是脚手架. 这里整理下在开发这样一套脚手架需要用到的工具
# 1. Commander (opens new window)
commander 是一个轻巧的 nodejs 模块,提供了用户命令行输入和参数解析强大功能
# 2. Chalk (opens new window)
美化终端命令的样式
const chalk = require("chalk");
const log = console.log;
const error = chalk.bold.red;
const warning = chalk.hex("#FFA500");
log(error("Error!"));
log(warning("Warning!"));
log(chalk.blue("Hello") + " World" + chalk.red("!"));
log(chalk.blue.bgRed.bold("Hello world!"));
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
效果:
# 3. node-semver (opens new window)
规范版本号的控制, semver (opens new window) 这里详细介绍了如何规范版本
常用的方法:
- valid 校验版本号是否符合标准, 正确直接返回, 错误的话返回 null
- coerce 将字符串强制转为正确的版本号
- clean 将字符串在可能的情况下转为正确的版本号
- satisfies 接收 2 个参数, 判断第一个参数是否符合第二个参数的要求, 一般用于判断当期版本号是否是期望的版本号
# 4. didyoumean (opens new window)
简单的 JS 匹配引擎
简单理解就是提前准备好一个命令列表数据, 然后对你输入的结果跟列表数据进行匹配, 在你输入错误的情况下判断你是否是想要的哪个命令
举个 🌰
// 准备好一个命令列表数据 list
var list = ['facebook', 'twitter', 'instagram', 'linkedin'];
// 输入一个值 insargrm
var input = 'insargrm'
// 使用 didYouMean 去匹配
console.log(didYouMean(input, list));
// 得到结果 instagram
> 'instagram'
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 可配置的参数:
- threshold 搜索阈值 默认: 0.4 值越大搜索范围越大, 反之越小
- thresholdAbsolute 绝对阈值 默认: 20
- caseSensitive 控制大小写, 如果设置为 true, 则大小写不一样也不会匹配. 默认忽略大小写
# 5. is-git-url (opens new window)
校验 git 地址
isGitUrl('git://github.com/jonschlinkert/is-git-url.git');
=> true
isGitUrl('https://github.com/jonschlinkert/');
=> false
1
2
3
4
5
2
3
4
5
# 6. ora (opens new window)
优雅的终端旋转器
const ora = require("ora");
const chalk = require("chalk");
const { red } = require("chalk");
const spinner = ora({
text: "加载中",
prefixText: "前缀文本->",
color: "gray",
});
spinner.start();
setTimeout(() => {
spinner.color = "yellow";
spinner.text = "加载变色了";
}, 1000);
setTimeout(() => {
// spinner.stop();
// spinner.succeed(chalk.green('加载成功'));
// spinner.fail(chalk.green('加载失败'));
spinner.warn(chalk.green("加载警告"));
}, 2000);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 7. execa (opens new window)
execa 是更好的子进程管理工具(A better child_process)。本质上就是衍生一个 shell,传入的 command 字符串在该 shell 中直接处理。
例如 npm 初始化:
const execa = require("execa");
execa("npm", ["init", "-y"]);
1
2
3
2
3
# 8. node-fs-extra (opens new window)
文件操作工具库
# 9. node-lru-cache (opens new window)
lru 缓存工具
# 10. inquirer (opens new window)
命令行的交互工具 比较常用的工具了 想学习的话直接看官网 Demo (opens new window)
# 11. validate-npm-package-name (opens new window)
校验 npm 包名是否合法
# 结语
目前我用到就是这些, 感觉学不动了! 后面准备再整理下怎么从 0 到 1 开发一个脚手架 Cli.
我是一个默默无闻的搬砖人 🧱