| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #!/bin/bash
- # 一键打包分发:只打代码与运行所需文件,本机密钥与数据(config.json / session.json /
- # manual-shops.json / ops-export.json / data/ / workspace/)默认不进包 —— 对方启动后
- # 会自动生成他们本机的配置和空数据库。
- #
- # 用法:
- # ./打包分发.command 仅代码(推荐)
- # ./打包分发.command --with-data 额外带上当前 data/ops.db(演示数据,注意脱敏)
- cd "$(dirname "$0")" || exit 1
- NAME="智慧运营中台-分发包"
- OUT="dist/$NAME"
- ZIP="dist/$NAME.zip"
- WITH_DATA=0
- [ "$1" = "--with-data" ] && WITH_DATA=1
- rm -rf "$OUT" "$ZIP" || exit 1
- mkdir -p "$OUT" "dist" || exit 1
- # 根目录代码:用通配更稳,新增模块不会漏
- for f in *.js; do
- case "$f" in
- config.js|session.js) continue ;;
- esac
- [ -f "$f" ] && cp "$f" "$OUT/"
- done
- # 配置文件与启动脚本
- for f in package.json package-lock.json config.example.json README.md \
- 启动.command 启动.sh 启动.bat 打包分发.command 打包分发.bat; do
- [ -f "$f" ] && cp "$f" "$OUT/"
- done
- # 目录(前端 / 服务端 / 脚本 / 依赖)
- for d in public server scripts napos node_modules; do
- [ -d "$d" ] && cp -R "$d" "$OUT/"
- done
- # 兜底:任何本机敏感文件都不进包
- rm -f "$OUT/config.json" "$OUT/session.json" "$OUT/manual-shops.json" "$OUT/ops-export.json"
- rm -rf "$OUT/data" "$OUT/workspace"
- find "$OUT" -name ".DS_Store" -delete 2>/dev/null
- if [ "$WITH_DATA" = "1" ] && [ -f data/ops.db ]; then
- mkdir -p "$OUT/data"
- # checkpoint 后再复制,保证 ops.db 自包含
- node -e "const {DatabaseSync}=require('node:sqlite');const db=new DatabaseSync('data/ops.db');db.exec('PRAGMA wal_checkpoint(TRUNCATE)');db.close();" 2>/dev/null || true
- cp data/ops.db "$OUT/data/ops.db"
- echo "已包含演示数据库:data/ops.db(请确认数据可外发)"
- fi
- # 打包前自检:缺任何一个运行期模块都直接失败,避免发出坏包
- if ! ( cd "$OUT" && node -e "require('./server/routes/index.js')" >/dev/null 2>&1 ); then
- echo "打包失败:分发包缺少运行期模块(请在包目录执行 node -e \"require('./server/routes/index.js')\" 查看具体缺失文件)"
- rm -rf "$OUT"
- exit 1
- fi
- (
- cd dist || exit 1
- rm -f "$NAME.zip"
- zip -qr "$NAME.zip" "$NAME"
- )
- if [ ! -f "$ZIP" ]; then
- echo "打包失败:$ZIP 未生成"; exit 1
- fi
- rm -rf "$OUT"
- SIZE=$(du -sh "$ZIP" | cut -f1)
- echo ""
- echo "已生成分发包: $ZIP($SIZE)"
- if [ "$WITH_DATA" = "1" ]; then
- echo "包含:代码 + node_modules + 演示数据库"
- else
- echo "包含:代码 + node_modules(不含 config.json / data / workspace)"
- fi
- echo ""
- echo "对方解压后:"
- echo " 1) 双击 启动.command(macOS)或 启动.bat(Windows)"
- echo " 2) 首次启动自动生成 config.json 与空数据库"
- echo " 3) 在「系统设置」里填自己的 API Key"
- echo ""
- echo "要求 Node.js >= 22.13(内置 SQLite 驱动);装过旧版可直接覆盖解压。"
|