402 - 《分享:我的小技巧集合》
之前写的小技巧系列集合,内部分享稿。加了删除线的最后一次分享由于时间原因做的删减,并非不适用。
时间:30min。
编程技巧篇
1、一个 Terminal 技巧,给自定义命令加了「,」前缀。好处是 1)和系统命令不冲突,2)敲「,」可以提示所有自定义命令,见图,来自一篇 2009 年的老文。
2、又一个 Terminal 技巧,配置 alias -s {html,css,js}=code
和 alias -s git="git clone --depth 1"
,然后比如直接输入 git@github.com:umijs/umi.git
就会做 clone,无需输入 git clone。
3、一个省时间的技巧,随机分支,再也不需要为分支名发愁了!我写了个自定义脚本,会随机 checkout 到名为「sorrycc-xxxx」的分支。脚本如下。
import 'zx/globals';
(async () => {
const length = 4;
const id = (Math.random() * 1e20).toString(36).substring(0, length);
await $`git checkout -b sorrycc-${id}`;
})();
4、和上一条技巧有个类似的,随机临时目录。我经常需要找个临时目录做一些事情,完成后就再也不需要这里的文件了。于是写了个脚本,在临时目录创建并进入名为「sorrycc-xxxxxx」的目录。由于是临时目录,重启后这里的文件会被自动删除。脚本如下。
alias cdtmp='cd `mktemp -d /tmp/sorrycc-XXXXXX`'
5、调试代码时之前只知道加 debugger;
。没想到还有 debug(functionName)
这种用法,当函数被调用时会进入 debug 模式。一个用法是想知道函数在哪里被定义,也可以用这个。参考 https://developer.chrome.com/docs/devtools/javascript/breakpoints/#function
6、如何删除本地被 Merge 过的分支?
$ git branch
* master
sorrycc-8729
sorrycc-cr9e
# 用 -d 只会删除 Merge 过的分支,换成 -D 会全部删除
$ git branch | grep -v "master" | xargs git branch -d
Deleted branch sorrycc-8729 (was c4a4870).
Deleted branch sorrycc-cr9e (was b522126).
$ git branch
* master
7、lint-staged 失败后文件丢失?可尝试通过 git stash pop
找回。
8、不知大家是如何排查组件是否 re-render?console.log?react devtool?一个好用直观的小技巧是,在组件层加一级 Math.random() 输出。比如 <div>{Math.random()}</div>
。
9、monorepo 用 pnpm publish 可以自动更新版本号,可以让发布省不少事。
{
"dependencies": {
"@umijs/bundler-utils": "workspace:*"
},
}
11、VSCode 下有个叫「Error Lens」插件非常好用,相见恨晚,可以在行内显示潜在出错信息,Intellij 系与之对应的插件叫「InlineError」。
12、学到一个 Bash 技巧,让 touch、vi 和 take 可以自动创建目录。
,touch () {
mkdir -p "$(dirname "$1")" && touch "$1"
}
,vi () {
mkdir -p "$(dirname "$1")" && vi "$1"
}
,take () {
mkdir -p "$(dirname "$1")" && take "$1"
}
13、换了个 VSCode 主题「Nako」,红色系,挺好看。更新:现在用的是 「Quiet Light」。
14、习惯用 Purrple Cat 作为工作背景音。
15、如何 Profile Node 应用?1、跑 Node 时加 --cpu-prof
参数,比如 node --cpu-prof $(which npm) run version
,结束后会产出一个或多个 .cpuprofile
文件,2、打开 https://www.speedscope.app/ 上传文件即可查看火焰图,包含详细的堆栈信息。参考这个和这个。
16、Benchmark 方法,用 brew 装个 hyperfine,然后 hyperfine --runs 10 'umi -v'
就可以看到 umi -v 跑 10 次的性能结果。
17、VSCode 有两个容易被忽略的快捷键,1)Ctrl+R,可以快速打开或切换项目,2)Ctrl+Q,可以切换 Panel 。
18、如果 Node 没有退出,可以用 why-is-node-running 或 wtfnode 查看原因。
19、echo $?
可以查看上一条命令的 exit code。
20、VSCode 配置里可以开「terminal.integrated.copyOnSelection」,让 Terminal 里选择既复制,和 iTerm 保持体验一致。
21、买一个橡皮鸭,对着他讲解东西。
22、VSCode 可以把侧边栏改成在上方显示,让横向空间更多一些。(注:有人推荐 Gruntfuggly.activitusbar 或 anweber.statusbar-commands 插件,可以把侧边栏放在状态栏里)
23、如何在提交时做 Prettier 但又忽略失败的场景?因为 prettier 有用但又没有重要到需要让 CI 失败。参考 https://github.com/cpojer/vite-ts-react-tailwind-template/commit/9cd0f93f8a0a68a81e6be72115a082c559d8a9c5 和 https://twitter.com/cpojer/status/1730408872563916963 。另一个技巧是 Astro 的做法,有个 CI 做 Prettier 的事,如果有 diff,CI 自动给你的分支 push 一个 format 过的 commit 。
24、iTerm2 里正确配置用 VSCode 打开文件和行,设置、Profiles、Advanced、Semantic History,选 Run Command…,输入 code --goto \1:\2
,如果找不到命令,可以写全 code 的路径,比如 /usr/local/bin/code --goto \1:\2
。
系统工具篇
1、mas 命令可以在命令行里安装 Mac 软件,一个好用的场景是在换电脑时重装软件时。
mas list
mas upgrade
mas search Tot
mas install 1491071483
2、gh 命令可以在命令行里操作 github,比如提 PR、绑定 ssh key 等,相见恨晚。我的常用命令。
gh auth login
gh pr create --fill
gh pr checkout 353
gh ssh-key add ~/.ssh/github.pub -t MBP2023
3、用 Zerotier 把家里所有电脑和手机都连起来,回老家后也可以无缝连回家里的 NAS 和 Windows 电脑。
4、在「Privacy & Security > Developer Tools」里把 Terminal 等开发者工具加上,绕开系统的安全策略,据说可以让请求和编译更快。来源。
5、查 IP 或运营商数据可在命令行中输入「curl cip.cc」。
$ curl cip.cc
IP : 42.120.103.61
地址 : 中国 浙江 杭州
运营商 : 阿里云/电信/联通/移动/铁通/教育网
数据二 : 浙江省杭州市 | 阿