| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #!/bin/bash
- ###############################################################################
- # fmode-brightdata-api 构建脚本
- #
- # 功能:
- # 1. 使用esbuild打包所有ESM模块
- # 2. 使用terser进行代码混淆和压缩
- # 3. 生成可发布到npm或CDN的dist文件
- # 4. 支持Deno和Node.js环境
- #
- # 使用方法:
- # chmod +x build.sh
- # ./build.sh
- #
- # 输出:
- # ./dist/{version}/fmode-brightdata-api.js - 打包后的文件
- # ./dist/{version}/fmode-brightdata-api.min.js - 混淆压缩后的文件
- ###############################################################################
- # 设置错误时退出
- set -e
- # 颜色输出
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- RED='\033[0;31m'
- NC='\033[0m' # No Color
- echo -e "${GREEN}==================================================${NC}"
- echo -e "${GREEN} fmode-brightdata-api 构建脚本${NC}"
- echo -e "${GREEN}==================================================${NC}"
- # 检查是否在正确的目录
- if [ ! -f "package.json" ]; then
- echo -e "${RED}错误: package.json 不存在${NC}"
- echo -e "${YELLOW}请确保在 fmode-brightdata-api 目录下运行此脚本${NC}"
- exit 1
- fi
- # 读取版本号
- VERSION=$(node -p "require('./package.json').version" 2>/dev/null || echo "1.0.0")
- if [ -z "$VERSION" ]; then
- echo -e "${RED}错误: 无法从 package.json 读取版本号${NC}"
- exit 1
- fi
- echo -e "${GREEN}版本号: ${VERSION}${NC}"
- # 创建dist/{version}目录
- DIST_DIR="dist/${VERSION}"
- echo -e "${YELLOW}[1/5] 创建 ${DIST_DIR} 目录...${NC}"
- rm -rf "${DIST_DIR}"
- mkdir -p "${DIST_DIR}"
- # 检查是否安装了依赖
- if [ ! -d "node_modules" ]; then
- echo -e "${YELLOW}[2/5] 安装依赖...${NC}"
- npm install
- else
- echo -e "${GREEN}[2/5] 依赖已安装,跳过...${NC}"
- fi
- # 使用esbuild打包 esm
- echo -e "${YELLOW}[3/5] 使用esbuild打包 ESM 格式...${NC}"
- npx esbuild src/mod.ts \
- --bundle \
- --format=esm \
- --platform=node \
- --target=node16 \
- --outfile="${DIST_DIR}/fmode-brightdata-api.js" \
- --sourcemap \
- --external:express
- if [ $? -eq 0 ]; then
- echo -e "${GREEN}✓ ESM 打包成功${NC}"
- else
- echo -e "${RED}✗ ESM 打包失败${NC}"
- exit 1
- fi
- # 使用esbuild打包 cjs
- echo -e "${YELLOW}[3/5] 使用esbuild打包 CJS 格式...${NC}"
- npx esbuild src/mod.ts \
- --bundle \
- --format=cjs \
- --platform=node \
- --target=node16 \
- --outfile="${DIST_DIR}/fmode-brightdata-api.cjs" \
- --sourcemap \
- --external:express
- if [ $? -eq 0 ]; then
- echo -e "${GREEN}✓ CJS 打包成功${NC}"
- else
- echo -e "${RED}✗ CJS 打包失败${NC}"
- exit 1
- fi
- # 使用terser压缩和混淆 ESM
- if command -v terser &> /dev/null; then
- echo -e "${YELLOW}[4/5] 使用terser压缩 ESM...${NC}"
- terser "${DIST_DIR}/fmode-brightdata-api.js" \
- --compress \
- --mangle \
- --output "${DIST_DIR}/fmode-brightdata-api.min.js" \
- --source-map "content='${DIST_DIR}/fmode-brightdata-api.js.map',url='fmode-brightdata-api.min.js.map'"
- else
- echo -e "${YELLOW}[4/5] terser 未安装,使用 esbuild --minify 代替...${NC}"
- npx esbuild "${DIST_DIR}/fmode-brightdata-api.js" \
- --minify \
- --outfile="${DIST_DIR}/fmode-brightdata-api.min.js" \
- --sourcemap
- fi
- # 使用terser压缩和混淆 CJS
- if command -v terser &> /dev/null; then
- echo -e "${YELLOW}[4/5] 使用terser压缩 CJS...${NC}"
- terser "${DIST_DIR}/fmode-brightdata-api.cjs" \
- --compress \
- --mangle \
- --output "${DIST_DIR}/fmode-brightdata-api.min.cjs" \
- --source-map "content='${DIST_DIR}/fmode-brightdata-api.cjs.map',url='fmode-brightdata-api.min.cjs.map'"
- else
- echo -e "${YELLOW}[4/5] terser 未安装,使用 esbuild --minify 代替...${NC}"
- npx esbuild "${DIST_DIR}/fmode-brightdata-api.cjs" \
- --minify \
- --outfile="${DIST_DIR}/fmode-brightdata-api.min.cjs" \
- --sourcemap
- fi
- echo -e "${GREEN}[5/5] 构建完成!${NC}"
- echo -e "${GREEN}输出目录: ${DIST_DIR}${NC}"
|