You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Cloud Build执行npm publish时dist文件夹丢失问题求助

Cloud Build发布npm包时dist文件夹内容丢失的解决思路

核心问题定位

你的Cloud Build流水线里有一步清理命令存在破坏性逻辑:

find . -type f ! -name "package.json" -delete
rm -rf src
rm -rf tsconfig

find . -type f ! -name "package.json" -delete会递归删除当前目录下所有非package.json的文件,这直接把你刚build出来的dist目录里的所有编译产物(js、d.ts等文件)全部清空了。你后续的ls -lia只能看到dist文件夹本身还存在,但里面已经没有任何内容,导致npm publish时自然无法包含dist的内容。

而本地执行正常,是因为你本地从未执行过这个破坏性的删除操作。

修复方案

1. 修正清理脚本,保留dist内容

把清理步骤改成精准删除不需要的文件/目录,而非一刀切删除所有非package.json的文件:

# 只删除src目录和tsconfig相关配置文件
rm -rf src
rm -rf tsconfig*.json
# 如有其他需要删除的文件,单独指定,不要用全局匹配

2. 简化package.json的files字段

你当前的files字段重复了大量相同的glob规则,完全没必要,一行即可覆盖dist下所有内容:

"files": [
  "dist/**/*"
]

npm的glob匹配支持递归,dist/**/*已经能覆盖dist目录下所有层级的文件和子目录。

3. 新增dist内容校验步骤

在publish前添加一步,确认dist目录下确实存在编译产物:

- name: "gcr.io/cloud-builders/gcloud"
  dir: "packages/config"
  entrypoint: bash
  args:
    - "-c"
    - |
      echo "---dist目录内容校验---"
      ls -la ./dist
      # 可以进一步检查关键文件是否存在,比如:
      # test -f ./dist/cjs/src/index.js && echo "cjs产物存在" || echo "cjs产物缺失"

额外优化建议

  • 用npm publish --dry-run测试打包结果:在Cloud Build的publish步骤里加上--dry-run参数,会输出npm准备打包的文件列表,能快速确认dist是否被正确包含:
    args: ["-w", "@myapp/config", "publish", "--no-git-tag-version", "--dry-run"]
    
  • 再次确认.npmignore文件:确保没有意外写入排除dist的规则,比如dist/*这类错误配置。

内容的提问来源于stack exchange,提问作者Stf_F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:42:08