{ "name": "us-iran-military-dashboard", "private": true, "version": "1.0.0", "type": "module", "scripts": { "start": "./start.sh", "dev": "vite", "api": "node server/index.js", "api:seed": "node server/seed.js", "crawler": "cd crawler && python main.py", "gdelt": "cd crawler && uvicorn realtime_conflict_service:app --host 0.0.0.0 --port 8000", "crawler:test": "cd crawler && python3 -c \"import sys; sys.path.insert(0,'.'); from scrapers.rss_scraper import fetch_all; n=len(fetch_all()); print('RSS 抓取:', n, '条' if n else '(0 条,检查网络或关键词过滤)')\"", "build": "vite build", "typecheck": "tsc --noEmit", "lint": "eslint .", "preview": "vite preview", "verify": "./scripts/verify-pipeline.sh", "verify:full": "./scripts/verify-pipeline.sh --start-crawler" }, "dependencies": { "better-sqlite3": "^11.6.0", "cors": "^2.8.5", "echarts": "^5.5.0", "echarts-for-react": "^3.0.2", "express": "^4.21.1", "lucide-react": "^0.576.0", "mapbox-gl": "^3.6.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-map-gl": "^7.1.7", "react-router-dom": "^7.13.1", "swagger-ui-express": "^5.0.1", "ws": "^8.19.0", "zustand": "^5.0.0" }, "devDependencies": { "@eslint/js": "^9.13.0", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", "@vitejs/plugin-react": "^4.3.3", "autoprefixer": "^10.4.20", "eslint": "^9.14.0", "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-react-refresh": "^0.4.14", "globals": "^15.11.0", "postcss": "^8.4.47", "tailwindcss": "^3.4.14", "typescript": "~5.6.2", "typescript-eslint": "^8.11.0", "vite": "^5.4.10" } }