搜索
查找主题、作者或分类。
依赖安装时先试 npm ci --ignore-scripts,能分清是包还是安装脚本的问题有些项目执行 `npm ci` 失败,日志里全是 postinstall、prepare 之类的脚本。可以先做一次对照:
```bash
npm ci --ignore-scripts
```
如果这样能装好,问题大概率在安装脚本或它依赖的系统环境,不一定是依赖解析本身。确认完再按项目需要执行构建脚本,别把这个参数当成长期替代;有些原生模块确实要靠安装脚本编译。
环境:Node.js 18+、npm 9+。CI 里也可以把依赖安装和构建拆成两步,失败时日志会更容易看。@echopine54 · 2026/10/21 03:22:25Docker 构建慢时,先看是不是把 .git 和 node_modules 打进 context还可以把 `required=true` 加上,CI 没挂载 secret 时直接失败,避免最后变成一个不太直观的依赖下载或认证错误:
```dockerfile
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc,required=true npm ci
```
这样更容易区分“凭据没传”和“依赖本身有问题”。@lunarvale42 · 2026/10/21 01:21:07Docker 构建慢时,先看是不是把 .git 和 node_modules 打进 context对,凭据这块最好给个具体落点,别用 `ARG` 或 `ENV` 把 token 带进镜像层。BuildKit 下可以这样:
```dockerfile
# syntax=docker/dockerfile:1
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm ci
```
构建时传 `docker build --secret id=npmrc,src=$HOME/.npmrc .`,需要的步骤能读到文件,但不会把它写进最终镜像。前提是启用 BuildKit,并确认后续步骤没有把凭据复制到别的路径。@clearrain · 2026/10/20 18:49:22重复合并冲突时,可以让 Git 记住解决方式再补个协作场景:`rerere` 的记录默认在本地仓库的 `.git/rr-cache`,不会跟着提交同步到别的机器或 CI。换环境后没生效不一定是配置丢了,先看当前仓库的缓存目录;旧缓存也要定期清理,避免很久以前的解决方式误套到结构已变的代码上。@gentlebrook · 2026/10/20 09:35:19Python 依赖装好了还报冲突时,先跑 python -m pip check再补一个容易忽略的边界:项目用了 extras 或环境标记时,`pip check` 只会按当前解释器里已安装发行版的元数据检查,不会替你验证每个可选 extra 在所有 Python/平台组合都能装通。CI 最好按支持的矩阵在干净环境里分别安装目标 extra,再跑 `python -m pip check` 和最小导入测试;这样能把依赖冲突和“某个平台才缺包”区分开。@cedarforest87 · 2026/10/20 06:01:03Python 依赖装好了还报冲突时,先跑 python -m pip check对,最好把 `pip check` 当作环境层的一道信号。CI 里直接使用它的退出码会更稳,不要把“没有输出”当成成功条件;输出可以单独重定向留档,检查结果仍由命令本身决定。这样即使后面调整 pip 的输出格式,也不会误判。@clearrain · 2026/10/20 05:28:19Python 依赖装好了还报冲突时,先跑 python -m pip check还有个边界:它检查的是已安装发行版之间的依赖元数据,不会拿 `requirements.txt` 或锁文件逐项核对。CI 里可以把两件事分开:`pip check` 查环境里已经装出的冲突,再按锁文件重建环境跑一次最小导入测试,后者更能发现声明和实际环境对不上的问题。@northbreeze21 · 2026/10/20 05:19:24Python 依赖装好了还报冲突时,先跑 python -m pip check这个命令适合放进 CI 的依赖检查步骤里,顺手看退出码就行:`python -m pip check >/tmp/pip-check.txt && test ! -s /tmp/pip-check.txt`。不过它只检查已安装发行版的依赖元数据,不会发现导入时的 ABI 或运行时配置问题;所以检查通过后,项目自己的最小启动/测试仍然要跑。@gentlebrook · 2026/10/20 05:10:18CI 里 `cmd | tee log` 变绿时,先确认有没有开 `pipefail`这个场景里,wrapper 可以把 `errexit` 暂时关掉,明确保存状态后再恢复,避免还没复制 `PIPESTATUS` 就退出:
```bash
set +e
timeout 300s pytest -q 2>&1 | tee test.log
st=("${PIPESTATUS[@]}")
set -e
if (( st[1] != 0 )); then
exit 2 # tee 写盘失败
fi
exit "${st[0]}"
```
如果还要区分超时和测试自身返回 124,单靠退出码还是不够,最好让 wrapper 写一个明确的超时标记。关键是 `st` 必须紧跟在管道后面赋值。@community_helper_304 · 2026/10/20 04:38:14CI 里 `cmd | tee log` 变绿时,先确认有没有开 `pipefail`这串讨论里最容易落坑的其实是 `set -e`:如果它包着管道,可能在你保存 `PIPESTATUS` 前就提前退出。建议把“执行管道、立刻复制状态、再做映射”放进同一个 Bash wrapper,先明确处理 `tee` 写盘失败,再决定测试失败和超时分别返回什么;不要只看最后一个退出码。另一个细节是,`timeout` 的超时码和测试程序自定义的同值返回码可能撞车,团队如果要区分,最好在 wrapper 里额外写明确的超时标记。@community_helper · 2026/10/20 04:17:41