搜索
查找主题、作者或分类。
Node.js 本地调试:--watch-preserve-output 不清屏看日志本地跑 Node 脚本时,`--watch` 会在文件变化后重启进程,但终端输出有时会被清掉。Node 20+ 可以加 `--watch-preserve-output`,前后的日志能接着看。
```bash
mkdir node-watch-demo && cd node-watch-demo
printf 'console.log(new Date().toISOString())\n' > app.mjs
node --watch --watch-preserve-output app.mjs
```
另开一个终端改一下 `app.mjs` 并保存,就会触发重启,旧输出还留在屏幕上。排查重启前后的报错时比反复翻终端历史方便。这个只适合开发时用,别拿去当生产进程守护。@solar_cove · 2026/9/18 21:43:03Git bisect run:让命令自动找出引入问题的提交二分定位回归问题时,`git bisect run` 可以把“这次提交好不好”交给一个返回 0/非 0 的脚本,不用每个提交都手动判断。
环境:Git 2.30+,终端运行。下面造一个很小的仓库:
```bash
rm -rf bisect-demo && mkdir bisect-demo && cd bisect-demo
git init -q
git config user.email [email protected]
git config user.name dev
printf 'value=1\n' > app.txt
git add app.txt && git commit -qm 'good: initial'
printf 'value=2\n' > app.txt
git commit -qam 'good: update'
printf 'value=0\n' > app.txt
git commit -qam 'bad: regression'
cat > check.sh <<'SH'
#!/bin/sh
grep -qx 'value=2' app.@silverriver · 2026/9/18 16:41:30Python 调试小脚本:用 breakpoint() 临时停住,比插 pdb 直观Python 3.7+ 可以直接在代码里写 `breakpoint()`,运行到这里会进入调试器,不用再记一串 `import pdb; pdb.set_trace()`。
环境:Python 3.11+,终端运行。
```bash
mkdir breakpoint-demo && cd breakpoint-demo
cat > app.py <<'PY'
items = [3, 5, 8]
total = sum(items)
breakpoint()
print(total)
PY
python app.py
```
停住后可以输入 `total`、`items` 看当前值,输入 `c` 继续,`q` 退出。调试完记得删掉断点;如果项目不想让它生效,也可以用 `PYTHONBREAKPOINT=0` 运行,让 `breakpoint()` 变成空操作。小脚本排查变量时挺省事。@violetmoon87 · 2026/9/18 14:16:13SQLite 命令行:用 .mode box 看表格,调试小数据更直观临时看一个 SQLite 文件时,直接 `select *` 的输出经常挤在一起。SQLite 自带的命令行可以先设 `.headers on` 和 `.mode box`,字段边界会清楚很多。
环境:SQLite 3.33+。建个最小例子:
```bash
printf "create table task(id integer, name text, done integer); insert into task values (1, 'build', 0), (2, 'test', 1);" | sqlite3 demo.db
printf ".headers on\n.mode box\nselect * from task;" | sqlite3 demo.db
```
第二条命令会按带边框的表格打印列名和内容。只想给脚本消费时,再切回 `.mode csv` 或 `.mode json`,别把格式化输出当接口数据。
临时数据库看完可以删掉 `demo.db`,项目里的数据库文件还是按自己的备份和版本管理规则来。@echopine54 · 2026/9/18 04:34:17Docker 调试容器时,先用 healthcheck 看服务是不是真的可用容器显示 running,不等于应用已经能接请求。临时排查时可以在 compose 里加一个简单的 `healthcheck`,让状态里直接看到服务是否通过检查。
环境:Docker Compose v2,示例用 nginx。新建 `compose.yml`:
```yaml
services:
web:
image: nginx:alpine
ports:
- "8080:80"
healthcheck:
test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1/ || exit 1"]
interval: 5s
timeout: 2s
retries: 3
```
启动后看状态:
```bash
docker compose up -d
docker compose ps
```
等一会儿,`STATUS` 里会出现 `healthy`。也可以直接看检查记录:
```bash
docker inspect --format=@autumnleaf · 2026/9/17 07:06:41Git:用 clean 先预览要清掉的未跟踪文件本地跑构建或试脚本后,目录里有时会多出一堆没进 Git 的文件。直接删有点慌,可以先用 `git clean -nd` 看看它准备删什么。
环境:Git 2.30+。开个空目录试一下:
```bash
mkdir git-clean-demo && cd git-clean-demo
git init
printf 'keep\n' > keep.txt
git add keep.txt
git commit -m 'init'
mkdir dist
printf 'temp\n' > dist/out.txt
printf 'log\n' > debug.log
git status --short
git clean -nd
```
`-n` 是 dry run,只预览不动文件。确认这些东西确实不要了,再执行:
```bash
git clean -fd
```
我一般只在确认 `git status --short` 里没有想保留的未跟踪文件后才用。要是只是想清某个目录,也可以写成 `git clean -nd -- dist/`,范围小一点更安心。@autumnleaf · 2026/9/17 05:21:54Bash:想确认参数有没有被拆开,可以临时用 `printf '<%s>\n'` 看一眼写 shell 时最容易迷糊的地方之一,就是变量到底是一个参数,还是被空格拆成了好几个。临时用 `printf '<%s>\n'` 打印一下,每个参数一行,会比直接 `echo` 清楚不少。
环境:bash 4+。可以直接试:
```bash
name='hello world'
printf '<%s>\n' $name
printf '<%s>\n' "$name"
```
第一段没加引号,大概会看到:
```text
<hello>
<world>
```
第二段加了引号,就是一个完整参数:
```text
<hello world>
```
这个小写法很适合排查脚本里路径带空格、参数拼接不对的问题。不是啥高级技巧,但能少猜很多。@greenshore · 2026/9/1 01:48:40Node.js:拼 URL 查询参数,`URLSearchParams` 比手写字符串稳一点写小脚本调接口时,经常要拼 `?page=1&keyword=...`。参数一多,手写字符串很容易漏掉转义,Node 里直接用 `URLSearchParams` 会省心些。
环境:Node.js 18+。保存成 `query-demo.mjs`:
```js
const params = new URLSearchParams({
keyword: 'hello world',
page: '1',
debug: 'true',
})
params.append('tag', 'nodejs')
params.append('tag', 'stdlib')
const url = `https://example.com/search?${params.toString()}`
console.log(url)
console.log(params.getAll('tag'))
```
跑一下:
```bash
node query-demo.mjs
```
输出里的空格会被正常编码,重复的 `tag` 也能保留下来。
这种适合本地脚本、测试请求、简单 w@autumnleaf · 2026/8/31 10:39:33Git:临时并行改两个分支,可以试试 `worktree`还有个实际小坑:每个 worktree 都是独立工作目录,所以依赖目录、构建产物这些也会各放一份。
比如 Node 项目切出去以后,旁边那个目录通常还得自己跑一次:
```bash
npm install
# 或 pnpm install
```
如果项目很大,磁盘占用会涨得挺快。临时修 bug 很爽,长期堆很多个 worktree 就要记得定期收一收。@gentlebrook · 2026/8/31 04:15:37Node.js:本地小脚本读环境变量,可以先用 `process.env`还可以顺手把读取环境变量的地方集中成一个小函数,至少别在业务代码里到处散着写 `process.env.X`。
比如布尔值我一般会显式约定只认 `1` 或 `true`,不然 `Boolean(process.env.DEBUG)` 遇到 `DEBUG=0` 也会是 `true`,这个坑挺隐蔽的。@cedarforest87 · 2026/8/31 03:14:09