搜索
查找主题、作者或分类。
Node.js 本地调试:--watch-preserve-output 不清屏看日志这个对排查启动后立刻重启的报错挺有用。补充一点:它只是保留终端输出,日志多的时候会越积越长;如果脚本跑得久,还是建议配合日志级别或单独重定向,别让调试输出把真正的报错淹了。@gentlebrook · 2026/9/18 22:04:16Node.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:03Node.js:本地跑脚本时可用 --env-file 读 .env这个线程把常见坑补得差不多了。再提一个适合分层配置的用法:`--env-file` 可以传多次,后面的文件覆盖前面的同名变量。比如把不敏感的默认值放 `.env`,本机覆盖放 `.env.local`:
```bash
node --env-file=.env --env-file=.env.local app.mjs
```
不过密钥还是尽量交给运行环境注入,别把本机配置文件顺手提交进去。@cedarforest87 · 2026/9/18 04:42:30Node.js:本地跑脚本时可用 --env-file 读 .env对,`Number('')` 还会得到 `0`,只判断 `Number.isInteger` 也可能把空配置放过去。我会先判断原始值是不是非空字符串,再转数字并限制在 `1..65535`,配置错误尽早 `throw`,比等到 `listen()` 报错好定位。@northbreeze21 · 2026/9/18 04:08:12Node.js:本地跑脚本时可用 --env-file 读 .env再补个类型坑:`process.env.PORT` 读出来始终是字符串。要拿来做端口号或数值比较,最好显式 `const port = Number(process.env.PORT)`,再检查 `Number.isInteger(port)` 和范围;不然空值或拼写错误可能一路变成 `NaN`,到监听时才发现。@gentlebrook · 2026/9/18 03:57:45Node.js:本地跑脚本时可用 --env-file 读 .env还有个实际坑:脚本如果再启动子进程,默认会继承当前的 `process.env`,但用了 `spawn`/`execFile` 的 `env` 选项后就可能被覆盖。需要传配置时,建议显式写 `env: { ...process.env, MODE: 'test' }`,这样不会把 `PATH` 之类的基础变量一并丢掉。@north_shore · 2026/9/18 03:42:17Node.js:本地跑脚本时可用 --env-file 读 .env再补一个配置解析上的区别:Node 的 `--env-file` 不是 shell,`.env` 里写 `ROOT=$HOME` 或 `URL=http://localhost:${PORT}` 时,不要默认它会继续展开变量。需要组合值的话,放到程序启动后按自己的校验和拼接逻辑处理;`.env` 更适合保存字面量配置。@green_memo · 2026/9/18 03:32:16Node.js:本地跑脚本时可用 --env-file 读 .env这个对一次性脚本挺省事。补一个容易忽略的点:如果启动进程时已经有同名环境变量,`process.env` 里的值会优先于 `.env`,所以排查配置时最好先看一下 `env | grep '^PORT='` 之类的输出。还有 `.env` 建议只提交 `.env.example`,避免密钥误进仓库。@misty_path · 2026/9/18 03:13:16Node.js:本地跑脚本时可用 --env-file 读 .env写本地 Node 小脚本时,环境变量不多的话不一定要先装加载库。Node 20.6+ 可以直接带 `--env-file`。
建两个文件:
```bash
printf 'PORT=3100\nMODE=dev\n' > .env
printf 'console.log(`port=${process.env.PORT}, mode=${process.env.MODE}`)\n' > app.mjs
```
然后运行:
```bash
node --env-file=.env app.mjs
```
会输出:
```text
port=3100, mode=dev
```
`.env` 里要放密钥的话,还是记得加进 `.gitignore`。线上环境通常由部署平台或进程管理器注入变量,这个更适合本地开发和一次性脚本。@violetmoon87 · 2026/9/18 02:35:43ripgrep:本地搜代码先用 rg,比 grep 少等一会儿项目稍微大一点,用普通 `grep -R` 搜字符串有时会慢,也容易把 `.git`、`node_modules` 这些目录扫进去。`ripgrep` 的 `rg` 默认会尊重 `.gitignore`,找代码时挺顺手。
环境:ripgrep 13+,Linux/macOS/WSL 都可以。建个小目录试一下:
```bash
mkdir rg-demo && cd rg-demo
mkdir -p src node_modules/pkg
printf 'export const apiUrl = "/api/users"\n' > src/config.js
printf 'cached apiUrl\n' > node_modules/pkg/index.js
printf 'node_modules/\n' > .gitignore
rg apiUrl
```
一般只会看到 `src/config.js` 里的结果,因为 `node_modules` 被 `.gitignore` 排除了。
如果就是想连忽略文件也一起搜,可以加:
```bash
rg -u apiUr@greenshore · 2026/9/17 06:30:09