今天在做一些基于 tailwind css UI 组件库的调研,大概有十来个组件库,需新建大量的 HTML 文件来试用,整个过程有许多重复事情,比如新建文件、写入内容、浏览器打开,能否将这些重复劳动自动化?
后续会分享下有哪些好玩的流行的 tailwind css 组件库。
Before:
- 📁 新建 html 文件:
touch DaisyUI.html - VSCode 打开:
code DaisyUI.html - 写入基础模板
<!DOCTYPE html>... - 浏览器打开
- 开始写代码
After:
touchr DaisyUI.html
- 📁 新建 html 文件 自动🤖
- VSCode 打开:
code DaisyUI.html自动🤖 - 写入基础模板
<!DOCTYPE html>...自动🤖 - 浏览器打开 自动🤖
- 开始写代码
也就是一行命令就完成准备工作直接上手写代码。下面我们看看这个 touchr 怎么写。
TouchR —— Linux touch 命令增强版
逐步拆解功能并实现,最后组合起来。
- 新建文件,直接用 touch 即可:
touch "$1"
- VSCode 打开(当然前提是开启了 code 全局命令)
code "$1"
- 写入基础模板:使用
echo即可
echo '<!DOCTYPE html> ...' > filename
- 浏览器打开(Macos 使用
open):
start filename
完整代码如下,大家可以复制后使用,使用方式可以采用 alias(详见 Windows 打造和 macOS 几乎一样的开发体验):
# touchr **r** is for "recursive"
# 1. Create a new file under nested directory.
# @example
# touchr /path/to/file.ts -> mkdir -p /path/to && touch /path/to/file.ts
# 2. and open it in vscode
# 3. and if file name is `.html` then open it in browser.
# 4. and write into a template.
touchr() {
mkdir -p "$(dirname "$1")" && touch "$1" && code "$1"
# 如果文件名 `.html` 结尾则使用浏览器打开。
if [[ "$1" == *.html ]]; then
local name=$(basename "$1", '.html')
echo '<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>'$name' Quick Start</title>
</head>
<body>
<h1>'$name' Quick Start</h1>
</body>
</html>' > "$1"
start "$1"
fi
}
解释代码
mkdir -p "$(dirname "$1")":支持即使目录不存在也能新建touchr ./foo/bar/baz/hello.tsbasename "$1", '.html':获取除了后缀的文件名,比如basename ./foo/hello.html .html输出hello,然后放到模板的 title 以及 body 中,最后拼接成“<h1>Hello Quick Start</h1>”。
扩展阅读:去除文件后缀
去除文件后缀有多种方式。测试用例如下:
- 输入
index2.html输出index2 - 输入
index输出index - 输入
index-foo.html输出index-foo - 输入
foo/bar/baz/fox.html输出fox
最简单是使用内置方法 basename,如果知道要去除哪种文件扩展名:
remove_extension() {
local name=$(basename "$1", '.html') # 提取文件名(去除路径和后缀)
echo name
}
如果无法预先知道,需分两步:
remove_extension() {
local filename=$(basename "$1") # 提取文件名(去除路径)
echo "${filename%.*}" # 去除后缀
}
参考:bash 去除文件后缀
版本 2:用 live-server 打开,达到热更新效果 🔥
只需替换一行代码即可:
- start "$1"
+ pnpx live-server "$1" # serve index.html 并在浏览器打开
可以用 npx 但更推荐 pnpx 或 bunx 后两者速度更快 🚀。