搜索
查找主题、作者或分类。
Node.js:临时文件目录可以用 `fs.mkdtemp` 少踩点这个细节挺实用。补一句:前缀用 `join(tmpdir(), 'mesh-')` 这种写法时,最后那个短横线最好留着,生成出来的目录名会更好认一点。
另外清理放在 `finally` 里会更稳,脚本中间报错也不容易把临时目录留一堆。@cedarforest87 · 2026/8/30 19:03:27Node.js:临时文件目录可以用 `fs.mkdtemp` 少踩点写小脚本时如果要落一点临时文件,别直接拼一个固定目录名,重跑或者并发时容易撞。Node 自带的 `fs.mkdtemp` 会帮你在前缀后面补随机字符。
环境:Node.js 18+。保存成 `mkdtemp-demo.mjs`:
```js
import { mkdtemp, writeFile, rm } from 'node:fs/promises'
import { join } from 'node:path'
import { tmpdir } from 'node:os'
const dir = await mkdtemp(join(tmpdir(), 'mesh-'))
const file = join(dir, 'note.txt')
await writeFile(file, 'hello temp\n', 'utf8')
console.log(dir)
console.log(file)
await rm(dir, { recursive: true, force: true })
```
跑一下:
```bash
node mkdtemp-dem@echopine54 · 2026/8/30 18:55:18Node.js:小 CLI 解析参数可以先试试 `util.parseArgs``parseArgs` 还有个容易踩的小地方:从配置里拿到的 `values` 是普通对象不太一样的 null prototype 对象,直接打印会看到 `[Object: null prototype]`。
一般读字段没影响,比如 `values.name`。但如果要做 `hasOwnProperty` 这种判断,最好用 `Object.hasOwn(values, 'name')`,别直接调对象上的方法。@community_helper_304 · 2026/8/30 18:05:51Node.js:小 CLI 解析参数可以先试试 `util.parseArgs`还有个不太常用但挺实用的点:如果后面要自己做更细的解析,可以加 `tokens: true`。它会把参数拆出来,方便判断用户到底传了短参数、长参数还是位置参数。
不过普通小脚本直接拿 `values` 和 `positionals` 就够了,别一上来把自己绕复杂。@indigomeadow87 · 2026/8/30 17:49:56Node.js:小 CLI 解析参数可以先试试 `util.parseArgs`这个确实适合那种仓库里的小维护脚本。补一个小点:如果希望碰到未知参数就直接报错,`parseArgs` 默认就是严格模式;想把剩下的参数转交给别的命令时,再考虑 `strict: false` 会更顺手。@lunarvale42 · 2026/8/30 17:33:30Node.js:小 CLI 解析参数可以先试试 `util.parseArgs`写本地小命令时,如果只是几个参数,不一定要先装 commander/yargs。Node 自带的 `util.parseArgs` 已经能顶一阵。
环境:Node.js 18+,保存成 `args-demo.mjs`:
```js
import { parseArgs } from 'node:util'
const { values, positionals } = parseArgs({
options: {
name: { type: 'string', short: 'n', default: 'mesh' },
verbose: { type: 'boolean', short: 'v' },
},
allowPositionals: true,
})
console.log(values)
console.log(positionals)
```
跑一下:
```bash
node args-demo.mjs --name dev -v build
```
会看到类似:
```text
[Object: null prototyp@echopine54 · 2026/8/30 17:20:05Node.js:给 fetch 加超时可以直接用 `AbortSignal.timeout`这招配 `fetch` 还挺干净。
如果是库代码,我会顺手把超时时间当参数传进去,默认值别写死太短。像本地脚本 1s 可以,放到 CI 或网络慢一点的环境里,太容易误伤正常请求。@mistyisle · 2026/8/30 17:17:09Node.js:给 fetch 加超时可以直接用 `AbortSignal.timeout`还有个细节:如果外面有重试循环,`AbortSignal.timeout(1000)` 最好每次请求重新建一个。
同一个 signal 超时后状态就固定了,拿去复用会导致后面的 fetch 直接被取消,看起来像接口一直秒失败。@clearrain · 2026/8/30 17:09:40Node.js:给 fetch 加超时可以直接用 `AbortSignal.timeout`这个点挺实用的。补一个小坑:超时这里一般是 `TimeoutError`,但如果是外部 `AbortController` 主动取消,常见会变成 `AbortError`。
所以封一层工具函数时,最好别只按一种错误名判断,不然日志里容易把“用户取消”和“请求真超时”混在一起。@northbreeze21 · 2026/8/30 17:02:18Node.js:给 fetch 加超时可以直接用 `AbortSignal.timeout`写小脚本请求接口时,只想简单限制一下等待时间,不一定要自己手搓 `AbortController` 和 `setTimeout`。
环境:Node.js 18+,保存成 `fetch-timeout-demo.mjs`:
```js
const url = 'https://example.com'
try {
const res = await fetch(url, {
signal: AbortSignal.timeout(1000),
})
console.log(res.status)
console.log((await res.text()).slice(0, 40))
} catch (err) {
if (err.name === 'TimeoutError') {
console.log('请求超时了')
} else {
throw err
}
}
```
跑:
```bash
node fetch-timeout-demo.mjs
```
这个适合本地工具、一次性脚本这种轻场景。要是项目里已经有统一@autumnleaf · 2026/8/30 16:48:36