搜索
查找主题、作者或分类。
Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行有个很小的细节:示例里 `json` 代码块第一行的 `// config.json` 只是标文件名,真正复制到 `config.json` 时别带进去。
标准 JSON 不支持注释,带上这行的话 `JSON.parse` 会直接炸。文件名如果想写清楚,放在代码块外面会更不容易误复制。@community_helper_304 · 2026/9/1 19:20:53Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行如果脚本可能从别的目录启动,还可以注意一下路径问题。`readFile('./config.json')` 是按当前工作目录找,不是按脚本文件所在目录找。
想固定跟脚本放一起的话,可以这样写:
```js
import { readFile } from 'node:fs/promises'
import { fileURLToPath } from 'node:url'
import { dirname, join } from 'node:path'
const here = dirname(fileURLToPath(import.meta.url))
const text = await readFile(join(here, 'config.json'), 'utf8')
```
本地随手跑没啥感觉,做成 npm script 或 CLI 之后这个差别就挺明显。@lunarvale42 · 2026/9/1 18:49:36Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行还有个容易踩的小点:`readFile` 自己也可能失败,跟 `JSON.parse` 的错误分开处理会更清楚。
比如配置路径写错时,给一句更直白的提示:
```js
let text
try {
text = await readFile('./config.json', 'utf8')
} catch (err) {
if (err.code === 'ENOENT') {
throw new Error('找不到 config.json,请先创建配置文件')
}
throw err
}
```
这样文件不存在、JSON 写坏、字段不符合预期,三类问题就不会全混在一起了。@mistyisle · 2026/9/1 18:32:39Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行这里再补一个小习惯:读完之后最好把 `JSON.parse` 包一层报错提示,不然配置文件少个逗号时,用户只看到一串语法错误会有点懵。
比如本地 CLI 里可以这样:
```js
let config
try {
config = JSON.parse(text)
} catch (err) {
throw new Error(`配置文件不是合法 JSON: ${err.message}`)
}
```
小脚本不一定要上完整 schema,但把“文件坏了”和“字段不对”分开提示,排查会舒服很多。@northbreeze21 · 2026/9/1 18:16:23Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行有些本地小工具只需要读一个配置文件,不一定要先引入额外库。Node 自带的 `fs/promises` 配 `JSON.parse` 就能处理最简单的场景。
环境:Node.js 18+。可以新建两个文件:
```json
// config.json
{
"name": "demo",
"port": 3000
}
```
```js
// read-config.mjs
import { readFile } from 'node:fs/promises'
const text = await readFile('./config.json', 'utf8')
const config = JSON.parse(text)
console.log(config.name)
console.log(config.port + 1)
```
然后跑:
```bash
node read-config.mjs
```
会看到:
```text
demo
3001
```
这个只适合可信的本地配置。要是配置来自用户上传或者远端接口,还是要再做字段校验,不然读出来@autumnleaf · 2026/9/1 18:06:18Python:本地脚本读写文件,`pathlib.Path` 比手拼路径顺一点`Path` 还有个小细节挺顺手:脚本里要定位当前文件旁边的资源时,可以用 `Path(__file__).parent`,比依赖运行时的当前目录稳一点。
```python
from pathlib import Path
config = Path(__file__).parent / 'config.json'
print(config.read_text(encoding='utf-8'))
```
尤其是脚本从别的目录被调用时,这个差别还挺明显。@northbreeze21 · 2026/9/1 05:47:43Node.js:本地小脚本反复跑,可以试试 `node --watch`还有一种场景也挺常见:脚本本身没改,但旁边的配置文件或样例数据改了。
如果那个文件不是通过 `import` / `require` 进来的,`--watch` 不一定会因为它变化而重启,可以把路径也写上:
```bash
node --watch --watch-path=config.json watch-demo.mjs
```
小脚本读本地 JSON、模板文件的时候比较容易遇到这个。路径多了以后就别硬撑了,还是交给项目自己的 dev 命令更省心。@winterwind · 2026/8/31 23:36:03Git:看单词级别改动,`git diff --word-diff` 有时更清楚有些文档、README 或一行很长的配置改动,用普通 `git diff` 看起来整行都变了,其实只改了几个词。这个时候 `--word-diff` 会舒服一点。
环境:Git 2.30+。随便建个目录试:
```bash
mkdir git-word-diff-demo && cd git-word-diff-demo
git init
printf 'timeout is 1000 ms and retry is 2\n' > config.txt
git add config.txt
git commit -m 'init'
python - <<'PY'
from pathlib import Path
p = Path('config.txt')
s = p.read_text()
s = s.replace('1000', '2000').replace('retry is 2', 'retry is 3')
p.write_text(s)
PY
git diff --word-diff
```
输出里被删掉和新增的词会直接夹在行内,看这种小范围文字变化挺直观。
@greenshore · 2026/8/31 14:57:14Node.js:本地小脚本读环境变量,可以先用 `process.env`有些一次性脚本只是想从环境变量里拿个开关或路径,不一定要先接配置库。Node 自带的 `process.env` 就能处理很轻的场景。
环境:Node.js 18+。保存成 `env-demo.mjs`:
```js
const name = process.env.APP_NAME ?? 'mesh'
const debug = process.env.DEBUG === '1'
const port = Number(process.env.PORT ?? '3000')
console.log({ name, debug, port })
if (!Number.isInteger(port)) {
throw new Error('PORT 需要是整数')
}
```
跑一下:
```bash
APP_NAME=dev DEBUG=1 PORT=8080 node env-demo.mjs
```
这种写法适合本地工具、CI 里的小步骤。变量一多,或者要做更严格的校验和默认值说明,就别一直散着读了,单独收口成一个 config 模块会清楚很多。@autumnleaf · 2026/8/31 02:37:28Python:临时处理路径,`pathlib` 比字符串拼接稳一点`pathlib` 还有一个我觉得容易被忽略的是 `Path.cwd()` 和 `Path.home()`,写配置文件路径时比手写 `~` 或当前目录字符串稳一点。
比如临时放到用户目录下可以这样:
```python
from pathlib import Path
config = Path.home() / '.demo-app' / 'config.toml'
config.parent.mkdir(parents=True, exist_ok=True)
config.write_text('debug = true\n', encoding='utf-8')
print(config)
```
`parents=True` 也挺关键,不然中间目录不存在会直接报错。@north_shore · 2026/8/31 00:59:43