Files
suanming/package.json
patdelphi 1a58ab62b3 feat: 重新开发PDF下载功能
- 使用puppeteer替代html-pdf库实现真正的PDF生成
- 改进Markdown到HTML的转换逻辑,支持表格和列表
- 添加PDF专用CSS样式,优化打印效果
- 修复Buffer到字符串的转换问题
- 优化puppeteer启动参数,提高稳定性
- 支持A4格式,适当边距和分页控制
- 测试验证PDF生成功能正常工作
2025-08-21 18:25:11 +08:00

104 lines
3.4 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"name": "shenjige-numerology",
"private": true,
"version": "3.0.0",
"description": "神机阁 - AI驱动的中华传统命理分析平台提供八字、紫微斗数、易经占卜等专业分析服务",
"type": "module",
"packageManager": "pnpm@9.0.0",
"scripts": {
"dev": "concurrently \"npm run server\" \"vite\"",
"server": "nodemon server/index.cjs",
"build": "tsc -b && vite build",
"build:prod": "tsc -b && BUILD_MODE=prod vite build",
"lint": "eslint .",
"preview": "vite preview",
"start": "node server/index.cjs",
"db:init": "node server/scripts/initDatabase.cjs",
"test": "node tests/integration.test.cjs",
"test:integration": "node tests/integration.test.cjs"
},
"dependencies": {
"@hookform/resolvers": "^3.10.0",
"@radix-ui/react-accordion": "^1.2.2",
"@radix-ui/react-alert-dialog": "^1.1.4",
"@radix-ui/react-aspect-ratio": "^1.1.1",
"@radix-ui/react-avatar": "^1.1.2",
"@radix-ui/react-checkbox": "^1.1.3",
"@radix-ui/react-collapsible": "^1.1.2",
"@radix-ui/react-context-menu": "^2.2.4",
"@radix-ui/react-dialog": "^1.1.4",
"@radix-ui/react-dropdown-menu": "^2.1.4",
"@radix-ui/react-hover-card": "^1.1.4",
"@radix-ui/react-label": "^2.1.1",
"@radix-ui/react-menubar": "^1.1.4",
"@radix-ui/react-navigation-menu": "^1.2.3",
"@radix-ui/react-popover": "^1.1.4",
"@radix-ui/react-progress": "^1.1.1",
"@radix-ui/react-radio-group": "^1.2.2",
"@radix-ui/react-scroll-area": "^1.2.2",
"@radix-ui/react-select": "^2.1.4",
"@radix-ui/react-separator": "^1.1.1",
"@radix-ui/react-slider": "^1.2.2",
"@radix-ui/react-slot": "^1.1.1",
"@radix-ui/react-switch": "^1.1.2",
"@radix-ui/react-tabs": "^1.1.2",
"@radix-ui/react-toast": "^1.2.4",
"@radix-ui/react-toggle": "^1.1.1",
"@radix-ui/react-toggle-group": "^1.1.1",
"@radix-ui/react-tooltip": "^1.1.6",
"bcryptjs": "^2.4.3",
"better-sqlite3": "^12.2.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "1.0.0",
"concurrently": "^8.2.2",
"cors": "^2.8.5",
"date-fns": "^3.0.0",
"embla-carousel-react": "^8.5.2",
"express": "^4.18.2",
"helmet": "^7.1.0",
"input-otp": "^1.4.2",
"jsonwebtoken": "^9.0.2",
"lucide-react": "^0.364.0",
"next-themes": "^0.4.4",
"nodemon": "^3.0.2",
"puppeteer": "^24.17.0",
"react": "^18.3.1",
"react-day-picker": "8.10.1",
"react-dom": "^18.3.1",
"react-hook-form": "^7.54.2",
"react-resizable-panels": "^2.1.7",
"react-router-dom": "^6",
"recharts": "^2.12.4",
"sonner": "^1.7.2",
"tailwind-merge": "^2.6.0",
"tailwindcss-animate": "^1.0.7",
"vaul": "^1.1.2",
"zod": "^3.24.1"
},
"devDependencies": {
"@eslint/js": "^9.15.0",
"@types/bcryptjs": "^2.4.6",
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
"@types/jsonwebtoken": "^9.0.5",
"@types/node": "^22.10.7",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@types/react-router-dom": "^5",
"@vitejs/plugin-react": "^4.3.4",
"autoprefixer": "10.4.20",
"eslint": "^9.15.0",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.14",
"globals": "^15.12.0",
"node-fetch": "^2.7.0",
"postcss": "8.4.49",
"tailwindcss": "v3.4.16",
"typescript": "~5.6.2",
"typescript-eslint": "^8.15.0",
"vite": "^6.0.1",
"vite-plugin-source-info": "^1.0.0"
}
}