package.json
Rama main · réplica de lectura del repositorio original.
{
"name": "campus-wall",
"version": "1.0.0",
"description": "校园墙网站 + 广播站点歌系统",
"main": "server.js",
"engines": {
"node": ">=20.0.0"
},
"overrides": {
"axios": "1.20.0",
"lodash.set": "file:vendor/lodash-set-safe",
"lodash.unset": "file:vendor/lodash-unset-safe"
},
"scripts": {
"start": "node server.js",
"dev": "node --watch server.js",
"test": "npm run test:song-approval && npm run test:ip-lookup && npm run test:admin-request-cache && npm run test:dependency-safety && npm run test:pagination && npm run test:reservation && npm run test:avatar && npm run test:upload-middleware && npm run test:auth-upload && npm run test:ai && npm run test:cleanup && npm run test:wechat-output && npm run test:wechat-song-flow && npm run test:daily-song-state && npm run check:routes && npm run test:email-service && npm run test:anonymous-policy && npm run test:feedback-notices && npm run test:interaction-consistency && npm run test:backend-architecture && npm run test:gamification-service && npm run test:home-first-paint && npm run test:home-request-race && npm run test:site-info-sharing && npm run test:responsive-boundary && npm run test:radio-layout && npm run test:mp-weekly-song-schedule && npm run test:radio-submit-flow && npm run test:detail-interactions && npm run test:post-media-editor && npm run test:mp-draft-modules && npm run test:mp-draft-flow && npm run test:admin-style-architecture && npm run test:release-notes && npm run test:runtime && npm run test:http && npm run test:song-maintenance && npm run test:radio-slot-schedule && npm run test:frontend-assets && npm run test:feedback-clarity && npm run test:schema-migrations && npm run test:write-transaction && npm run test:notification-outbox && npm run test:content-transactions && npm run test:mp-sync-jobs && npm run test:architecture-reliability && npm run test:reschedule-idempotency && npm run test:database-startup-check && npm run test:song-submit-http && npm run test:wechat-author-repair && npm run test:public-privacy",
"test:admin-request-cache": "node scripts/test-admin-request-cache.js",
"test:song-approval": "node scripts/test-song-approval.js",
"test:ai": "node scripts/test-ai-provider.js",
"test:avatar": "node scripts/test-avatar-storage.js",
"test:upload-middleware": "node scripts/test-upload-middleware.js",
"test:auth-upload": "node scripts/test-auth-upload.js",
"test:dependency-safety": "node scripts/test-dependency-safety.js",
"test:cleanup": "node scripts/test-cleanup.js",
"test:wechat-output": "node scripts/test-wechat-output.js",
"test:wechat-song-flow": "node scripts/test-wechat-song-flow.js",
"test:wechat-author-repair": "node scripts/test-wechat-author-repair.js",
"test:email-service": "node scripts/test-email-service.js",
"test:anonymous-policy": "node scripts/test-anonymous-policy.js",
"test:feedback-notices": "node scripts/test-feedback-notices.js",
"test:interaction-consistency": "node scripts/test-interaction-consistency.js",
"test:backend-architecture": "node scripts/test-backend-architecture.js",
"test:gamification-service": "node scripts/test-gamification-service.js",
"test:pagination": "node scripts/test-pagination.js",
"test:reservation": "node scripts/test-reservation-availability.js",
"test:home-first-paint": "node scripts/test-home-first-paint.js",
"test:home-request-race": "node scripts/test-home-request-race.js",
"test:site-info-sharing": "node scripts/test-site-info-sharing.js",
"test:responsive-boundary": "node scripts/test-responsive-boundary.js",
"test:radio-layout": "node scripts/test-radio-layout.js",
"test:radio-submit-flow": "node scripts/test-radio-submit-flow.js",
"test:detail-interactions": "node scripts/test-detail-interactions.js",
"test:post-media-editor": "node scripts/test-post-media-editor.js",
"test:mp-draft-modules": "node scripts/test-mp-draft-modules.js",
"test:mp-draft-flow": "node scripts/test-mp-draft-flow.js",
"test:admin-style-architecture": "node scripts/test-admin-style-architecture.js",
"test:release-notes": "node scripts/test-release-notes.js",
"test:daily-song-state": "node scripts/test-daily-song-state.js",
"check:mirrors": "node scripts/check-frontend-mirror.js",
"check:privacy": "node scripts/check-sensitive-files.js",
"check:deployment": "node scripts/test-deployment-static.js",
"check:routes": "node scripts/test-route-stability.js",
"cleanup:avatars": "node scripts/cleanup-orphan-avatars.js",
"build": "npm run sync:frontend && npm run check:mirrors && node scripts/build-static-site.js",
"preview": "vite preview",
"test:mp-weekly-song-schedule": "node scripts/test-mp-draft-layout-static.js",
"test:runtime": "node scripts/test-runtime-lifecycle.js",
"test:http": "node scripts/test-http-application.js",
"test:song-maintenance": "node scripts/test-song-maintenance.js",
"sync:frontend": "node scripts/sync-frontend.js",
"test:frontend-assets": "node scripts/test-frontend-assets.js",
"test:radio-slot-schedule": "node scripts/test-radio-slot-schedule.js",
"test:feedback-clarity": "node scripts/test-feedback-clarity.js",
"test:schema-migrations": "node scripts/test-schema-migrations.js",
"test:write-transaction": "node scripts/test-write-transaction.js",
"test:notification-outbox": "node scripts/test-notification-outbox.js",
"test:content-transactions": "node scripts/test-content-transactions.js",
"test:mp-sync-jobs": "node scripts/test-mp-sync-jobs.js",
"test:architecture-reliability": "node scripts/test-architecture-reliability.js",
"test:reschedule-idempotency": "node scripts/test-reschedule-idempotency.js",
"test:database-startup-check": "node scripts/test-database-startup-check.js",
"test:song-submit-http": "node scripts/test-song-submit-http.js",
"test:ip-lookup": "node scripts/test-ip-lookup.js",
"build:demo": "node scripts/build-pages-demo.js",
"admin:create": "node scripts/create-initial-admin.js",
"test:public-privacy": "node scripts/test-public-privacy.js"
},
"dependencies": {
"@cloudbase/node-sdk": "^3.18.3",
"bcryptjs": "^2.4.3",
"compression": "^1.8.1",
"cookie-parser": "^1.4.6",
"cors": "^2.8.5",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"express-rate-limit": "^8.5.2",
"express-session": "^1.17.3",
"helmet": "^8.2.0",
"ip2region": "^2.3.0",
"jsonwebtoken": "^9.0.2",
"lodash": "^4.18.1",
"lodash.set": "file:vendor/lodash-set-safe",
"lodash.unset": "file:vendor/lodash-unset-safe",
"morgan": "^1.10.0",
"multer": "^2.4.0",
"mysql2": "^3.6.0",
"naive-ui": "^2.38.0",
"nodemailer": "^10.1.1",
"pinia": "^2.1.0",
"qrcode": "^1.5.4",
"ssh2": "^1.17.0",
"vue": "^3.4.0",
"vue-router": "^4.2.0",
"ipaddr.js": "^1.9.1"
},
"devDependencies": {
"vite": "^6.4.3"
}
}