{"id":24888673,"url":"https://github.com/eesast/web","last_synced_at":"2025-09-25T12:02:53.748Z","repository":{"id":37484141,"uuid":"194583027","full_name":"eesast/web","owner":"eesast","description":"Web front for EESAST","archived":false,"fork":false,"pushed_at":"2024-04-22T10:17:38.000Z","size":61857,"stargazers_count":5,"open_issues_count":12,"forks_count":24,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-04-22T11:32:32.230Z","etag":null,"topics":["antd","eesast","eslint","react","typescript"],"latest_commit_sha":null,"homepage":"https://eesast.github.io/web/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eesast.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-07-01T02:00:20.000Z","updated_at":"2024-04-22T11:32:33.065Z","dependencies_parsed_at":"2023-10-14T23:56:58.243Z","dependency_job_id":"b801a1c5-5c1b-43e8-bfb2-f83747a15eab","html_url":"https://github.com/eesast/web","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eesast%2Fweb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eesast%2Fweb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eesast%2Fweb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eesast%2Fweb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eesast","download_url":"https://codeload.github.com/eesast/web/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236684472,"owners_count":19188642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["antd","eesast","eslint","react","typescript"],"created_at":"2025-02-01T16:14:33.328Z","updated_at":"2025-09-25T12:02:48.702Z","avatar_url":"https://github.com/eesast.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EESAST WEB\n\n![CD](https://github.com/eesast/web/actions/workflows/cd.yml/badge.svg?branch=master)\n\nEESAST 网页前端\n\n## 开发\n\n### 1. 配置环境\n\n- `NodeJS 20` (官网下载安装包)\n- `NPM` (`Node`自带)\n- `Yarn` (`npm i yarn -g`)\n\n### 2. 编辑环境变量（默认已添加）\n\n- `REACT_APP_API_URL`：生产环境后端地址，默认为 `https://api.eesast.com`\n- `REACT_APP_API_DEV_URL`：测试环境后端地址，默认为 `https://api-dev.eesast.com`\n- `REACT_APP_HASURA_HTTPLINK`/`REACT_APP_HASURA_WSLINK`：生产环境`Hasura`数据库地址，默认为 `api.eesast.com/v1/graphql`\n- `REACT_APP_HASURA_DEV_HTTPLINK`/`REACT_APP_HASURA_DEV_WSLINK`：测试环境`Hasura`数据库`WebSocket`地址，默认为 `api-dev.eesast.com/v1/graphql`\n- 若需使用`GraphQL CodeGen`，要创建`.env.local`文件，并添加`HASURA_GRAPHQL_ADMIN_SECRET`\n\n### 3. 安装依赖和启动\n\n```bash\nyarn install // 如果Node版本低于20，可能会报错，需要添加参数--ignore-engines\nyarn start // 如果Node版本低于20，可能会报错，需要添加参数--openssl-legacy-provider\n```\n\n### 4. 推荐的工具和包\n\n#### VSCode 扩展\n\n- **`GitHub Copilot \u0026 GitHub Copilot Chat`**\n- `Prettier`\n- `ESLint`\n- `vscode-styled-component`\n- `GraphQL: Language Feature Support`\n\n#### 浏览器插件\n\n- `React DevTools`：调试`React`组件\n\n#### NPM 包\n\n- `rimraf`：在`Windows`上删除`node_modules`文件夹时更高效，类似于`Linux`中的`rm -rf`\n\n## 测试（维护）\n\n### 脚本\n\n- `yarn start`：支持热更新，保存文件后自动刷新页面\n- `yarn generate`：根据数据库自动生成类型文件\n- `yarn build`：编译打包源文件\n- `yarn analyze`：对`build`内的打包进行构成分析\n- `yarn test`：使用`Jest`进行测试\n- `yarn lint`：使用`ESLint`进行语法检查\n- `yarn typecheck`：使用`tsc`进行类型检查\n\n### CI/CD\n\n- `Commit`之前自动使用`husky \u0026 lint-staged \u0026 prettier`工具链进行代码风格美化\n  - 相关配置见`.husky/*`和`package.json`\n- `Commit`之后使用`Github Actions`进行自动化测试，包含`Jest`测试、`ESLint`语法检查、`tsc`类型检查\n  - 相关配置见`.github/workflows/*`\n\n### 依赖管理\n\n- 使用`Renovate Bot`和`Mergify`进行依赖自动更新\n  - 相关配置见`.github/renovate.json`和`.github/mergify.yml`\n- 依赖引入原则\n  - 能用`Plain HTML`、`CSS`、正则表达式解决的问题，不额外引入依赖\n  - 优先使用`React`、`antd`官方推荐的、或社区活跃度高（star）的包\n  - 优先使用自带`TypeScript`类型系统的包\n  - 不引入过于庞大的包（如`lodash`），可以用其旗下的子包（如`lodash-es`）替代\n  - 不引入过时（最近一次更新时间超过一年、或官网说明`Deprecated`）的包\n  - 区分`dependencies`和`devDependencies`（后者用`yarn add -D`添加）\n  - 指定版本号，不使用`^`和`~`（为了`Renovate Bot`能够自动更新）\n- 依赖管理方法\n  - `yarn outdated`：查看过时的依赖\n  - `depcheck`：查看未被使用的依赖（需要先安装`depcheck`）\n- 依赖手动更新原则\n  - 使用`yarn upgrade-interactive`进行交互式更新\n  - 了解`Sementic Versioning`语义化版本规范，先更新到最新的`patch`版本，再逐步更新`minor`版本，更新`major`版本时需要谨慎，可以查阅网上已有教程或更新脚本\n  - 更新前`commit`所有更改，更新后测试无报错后立即`commit`\n  - 若发现有依赖长期未更新或显示`Deprecated`，可以考虑替换同类依赖\n\n## 生产\n\n### Docker\n\n- 对主分支的`push`会触发自动化生产，相关配置见`.github/workflows/*`\n- 使用`Dockerfile`进行构建，并上传到`Docker Hub`\n  - 与`yarn build`相同，优点是跨平台\n\n## 部署\n\n### Docker-compose\n\n```bash\ndocker pull eesast/web:latest // 下载Docker-Hub镜像\ndocker-compose up -d\n```\n\n### Nginx\n\n`server_name eesast.com`, 反向代理到`27776`端口\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feesast%2Fweb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feesast%2Fweb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feesast%2Fweb/lists"}