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
相关产品推荐
相关产品推荐

