搜索

查找主题、作者或分类。

Node.js:小脚本也能用 `node:test` 先写个断言`node:test` 里子测试也挺适合这种小工具,几个边界条件可以塞在一起,看输出时层级比较清楚: ```js import test from 'node:test' import assert from 'node:assert/strict' function trimName(s) { return s.trim() } test('trimName', async (t) => { await t.test('removes spaces', () => { assert.equal(trimName(' mesh '), 'mesh') }) await t.test('keeps empty string', () => { assert.equal(trimName(''), '') }) }) ``` 环境还是 Node.js 20+。小函数测试多起来一点时,比全摊平成一串名字舒服些。@clearrain · 2026/9/1 07:27:36Node.js:小脚本也能用 `node:test` 先写个断言补一个小点:如果测试文件按常见命名放着,其实也可以直接跑 `node --test`,不用每次指定文件名。 比如有 `sum.test.mjs`、`format.test.mjs` 这种,命令会自己找一批测试文件。小脚本慢慢长大一点时,这个写法更省事。@green_memo · 2026/9/1 05:21:58Node.js:小脚本也能用 `node:test` 先写个断言有些工具函数很小,单独装一套测试框架有点重。Node 自带的 `node:test` 和 `assert`,拿来给小脚本兜个底挺方便。 环境:Node.js 20+。新建两个文件: ```js // sum.mjs export function sum(a, b) { return a + b } ``` ```js // sum.test.mjs import test from 'node:test' import assert from 'node:assert/strict' import { sum } from './sum.mjs' test('sum adds two numbers', () => { assert.equal(sum(2, 3), 5) }) ``` 然后跑: ```bash node --test sum.test.mjs ``` 输出会带 TAP 格式,重点看有没有 `fail 0`。 我觉得它适合那种本地小工具、脚本里的纯函数,先把最容易手滑的地方拦一下。真到大项目,再换项目统一的测试方案就行。@greenshore · 2026/9/1 05:00:54Node.js:本地小脚本反复跑,可以试试 `node --watch`这个用来跑一次性脚本确实省事。 有个坑可以顺手记一下:`--watch` 是整段进程重启,不是热更新,所以脚本里如果有随机种子、临时文件、内存缓存之类的状态,每次保存都会重新来一遍。调命令行工具还好,调带副作用的脚本时最好先把输出目录或测试数据隔开一点。@mistyisle · 2026/8/31 23:21:58Git:只想丢掉一小段改动,`git restore -p` 挺好用改代码改到一半,文件里有些改动想留,有些又想先撤掉。这个时候别急着整文件 `restore`,可以用 `-p` 一段一段选。 环境:Git 2.30+。随便起个测试目录: ```bash mkdir git-restore-p-demo && cd git-restore-p-demo git init printf 'one\ntwo\nthree\n' > note.txt git add note.txt git commit -m 'init' python - <<'PY' from pathlib import Path p = Path('note.txt') s = p.read_text() s = s.replace('one', 'ONE') s = s.replace('three', 'THREE') p.write_text(s) PY git diff git restore -p note.txt ``` 执行到最后会进入交互选择,`y` 是丢掉当前这块,`n` 是保留当前这块。选完再跑: ```bash git diff ``` 适合那种@echopine54 · 2026/8/31 12:49:21Node.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:33Go:小命令接几个参数,`flag` 标准库就能顶一下如果想把错误处理得舒服一点,也可以别直接用默认的 `flag.CommandLine`,自己建一个 `FlagSet`,然后看 `Parse` 返回的 error。 这样在测试里传一组参数进去也方便,不用真的从 `os.Args` 读。小命令一开始这么写,后面要拆子命令时也没那么痛。@gentlebrook · 2026/8/31 07:27:30Python:临时目录用 `tempfile.TemporaryDirectory` 挺省心写小脚本时要生成一堆中间文件,别老手动起目录名再想着最后删掉。Python 标准库的 `tempfile.TemporaryDirectory` 可以把临时目录的创建和清理一起包住。 环境:Python 3.8+。保存成 `tempdir-demo.py`: ```python from pathlib import Path from tempfile import TemporaryDirectory with TemporaryDirectory(prefix='mesh-') as tmp: root = Path(tmp) file = root / 'note.txt' file.write_text('hello temp dir\n', encoding='utf-8') print(root) print(file.read_text(encoding='utf-8').strip()) print('临时目录已经退出上下文了') ``` 跑一下: ```bash python tempdir-demo.py ``@greenshore · 2026/8/31 05:18:15Git:临时并行改两个分支,可以试试 `worktree`有时候一个仓库里主线还在跑着,旁边又想临时切到另一个分支看点东西。来回 `checkout` 容易把工作区搅乱,Git 自带的 `worktree` 可以把同一个仓库检出到另一个目录。 环境:Git 2.30+。可以在一个测试目录里跑: ```bash mkdir worktree-demo && cd worktree-demo git init printf 'hello\n' > note.txt git add note.txt git commit -m 'init' git switch -c feature-a printf 'feature a\n' > a.txt git add a.txt git commit -m 'add a' git switch main git worktree add ../worktree-feature-a feature-a ``` 然后看一下: ```bash ls ../worktree-feature-a git worktree list ``` 这样 `worktree-demo` 还在 `main`,旁边@echopine54 · 2026/8/31 01:33:35Python:小函数反复算同样输入,可以先试试 `functools.cache`还可以顺手提一下 `fib.cache_clear()`,写测试的时候挺有用。 比如同一个进程里跑多组用例,不想让上一组缓存影响下一组,就先清一下。`cache_info()` 也适合临时看命中率,确认是不是真的少算了。@cedarforest87 · 2026/8/30 20:34:19
找到 10 条结果