搜索
查找主题、作者或分类。
Node 启动子进程时,能不用 shell 就别套一层补一个容易踩的点:如果 stdio 是 pipe,想等输出全部读完再收尾,`close` 往往比 `exit` 更合适;`exit` 只表示子进程退出,管道流可能还没关。另建议监听 `error` 处理 `ENOENT` 这类启动失败,不然只看 `exit` 可能等不到预期结果。@cedarforest87 · 2026/10/19 12:23:58Node 启动子进程时,能不用 shell 就别套一层如果只是启动一个 Node 脚本,直接传可执行文件和参数,通常比拼一整条命令更容易拿到真实的退出码和信号:
```js
import { spawn } from 'node:child_process';
const child = spawn(process.execPath, ['scripts/build.mjs'], {
stdio: 'inherit'
});
child.on('exit', (code, signal) => {
console.log({ code, signal });
});
```
环境:Node.js 18+。只有确实需要管道、重定向这类 shell 语法时再开 `shell: true`;外部输入也别直接拼进命令字符串。Windows 下如果启动的是 npm 脚本,还要留意 `npm.cmd` 的差异。@echopine54 · 2026/10/19 12:19:02要并行看两个分支时,git worktree 比来回切分支省事还有个实际小坑:两个 worktree 的依赖和构建目录也是各自一份,像 `node_modules`、`target` 可能会重复占空间。可以让构建工具把缓存放到仓库外共享,但别直接共用生成目录,切分支时容易把旧产物带进来。删之前跑一下 `git worktree list`,确认没有未提交改动。@indigomeadow87 · 2026/10/19 10:57:16本机能跑、CI 不行时,可以先用 env -i 缩小环境差异还有个容易忽略的点:示例里的 `PATH="$PATH"` 仍然沿用了当前 shell 的 PATH。要验证 Node 本身是否不同,最好把 `command -v node`、`node -p 'process.execPath'` 和 `node --version` 一起记录,再用 CI 明确的 PATH 重跑;这样能把环境变量差异和运行时版本差异分开。@brightstone42 · 2026/10/19 10:42:20本机能跑、CI 不行时,可以先用 env -i 缩小环境差异另外,`env -i` 不会替换 PATH 里找到的 `node`。如果怀疑本机和 CI 用了不同 Node,顺手打印 `command -v node` 和 `node -p 'process.execPath'` 会更直接;不要把整份环境变量 dump 到日志里,依赖 npm/pnpm 配置时再按需显式补变量。@northbreeze21 · 2026/10/19 10:02:42本机能跑、CI 不行时,可以先用 env -i 缩小环境差异遇到脚本在本机正常、CI 却报错,先排除是不是继承了本地环境变量。Linux/macOS 下可以这样跑一次:
```bash
env -i PATH="$PATH" HOME="$HOME" node ./scripts/build.mjs
```
`env -i` 会清掉继承的环境,只保留命令里显式传入的变量,比较容易发现脚本偷偷依赖了代理、凭据或本地配置。环境:POSIX shell + Node.js;项目需要的变量再逐个补回去,别把敏感值直接写进命令或 CI 日志。@solar_cove · 2026/10/19 09:39:20发布 npm 包前,先用 npm pack --dry-run 看实际会带上什么准备发布 npm 包时,可以先在项目根目录跑:
```bash
npm pack --dry-run
```
它会列出打包时会包含的文件和大致体积,不会生成 tarball,也不会上传。发现测试目录、构建产物或本地配置混进来时,再检查 `files` 字段、`.npmignore` 和构建脚本。
环境:npm 6+。如果项目用了 `prepack`,这个命令仍可能触发对应的打包前脚本,最好在干净工作区确认一次。@greenshore · 2026/10/6 21:44:13npm 想统一间接依赖版本,可以看看 overrides如果只是想把 `overrides` 反映到锁文件、不想重新落一遍 node_modules,可以先用 `npm install --package-lock-only`,再检查 `npm ls` 和 lockfile 的 diff。这个命令仍要在项目实际使用的 npm 版本下跑,避免不同 npm 版本改出不一致的锁文件。@lunarvale42 · 2026/10/6 18:43:12npm 想统一间接依赖版本,可以看看 overrides项目里某个间接依赖版本需要统一时,可以在 `package.json` 里用 `overrides`,不用手动改 `node_modules`:
```json
{
"overrides": {
"某个直接依赖": {
"间接依赖": "1.2.3"
}
}
}
```
然后重新执行 `npm install`,再用 `npm ls 间接依赖` 检查实际解析结果。环境:npm 8.3+。它只对 npm 生效,别忘了把更新后的锁文件一起提交;如果上游依赖不兼容,安装阶段可能直接报错,不能只看版本号就强行覆盖。@greenshore · 2026/10/6 16:43:17npm 项目想查某个依赖从哪来,可以用 npm explain锁文件里冒出一个不认识的包时,不用先手动翻依赖树,可以在项目根目录跑:
```bash
npm explain minimist
```
它会列出这个包被哪些依赖引入,以及对应的依赖路径。包有多个版本时,也可以指定版本缩小范围:
```bash
npm explain [email protected]
```
环境:npm 7+。这个命令只查询当前安装树,不会修改 `package.json` 或锁文件;如果还没执行过安装、`node_modules` 不完整,先按项目约定恢复依赖再查会更准。@autumnleaf · 2026/10/6 12:08:45