Skip to content

Commit

Permalink
✨ feat: 支持 Vercel 部署
Browse files Browse the repository at this point in the history
  • Loading branch information
imsyy committed Jun 7, 2024
1 parent 11addd2 commit 14bc5a1
Show file tree
Hide file tree
Showing 9 changed files with 76 additions and 30 deletions.
9 changes: 6 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
FROM node:20-alpine AS base

ENV NODE_ENV=docker

# 安装 Puppeteer 所需的依赖库
RUN apk add --no-cache chromium nss freetype harfbuzz ca-certificates libc6-compat
RUN apk add libc6-compat
# RUN apk add chromium nss freetype harfbuzz ca-certificates

# 配置 Chromium
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
# ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
# ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser

FROM base AS builder

Expand Down
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@
| 稀土掘金 | 热榜 | juejin | 🟢 |
| 腾讯新闻 | 热点榜 | qq-news | 🟢 |
| 网易新闻 | 热点榜 | netease-news | 🟢 |
| 吾爱破解 | 榜单 | 52pojie | 🟢 |
| 全球主机交流 | 榜单 | hostloc | 🟢 |
| 吾爱破解 | 榜单 | 52pojie | |
| 全球主机交流 | 榜单 | hostloc | |
| 虎嗅 | 24小时 | huxiu | 🟢 |
| 爱范儿 | 快讯 | ifanr | 🟢 |
| 英雄联盟 | 更新公告 | lol | 🟢 |
Expand Down Expand Up @@ -148,6 +148,12 @@ npm run start

成功启动后程序会在控制台输出可访问的地址

### Vercel 部署

本项目支持通过 `Vercel` 进行一键部署,点击下方按钮或前往 [项目仓库](https://github.com/imsyy/DailyHotApi-Vercel) 进行手动部署

[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/imsyys-projects/clone?repository-url=https%3A%2F%2Fgithub.com%2Fimsyy%2FDailyHotApi-Vercel)

### Railway 部署

本项目支持使用 [Railway](https://railway.app/) 一键部署,请先将本项目 fork 到您的仓库中,即可使用一键部署。
Expand All @@ -156,12 +162,6 @@ npm run start

本项目支持使用 [Zeabur](https://zeabur.com/) 一键部署,请先将本项目 fork 到您的仓库中,即可使用一键部署。

### Vercel 部署

> 🚧 Vercel 部署支持正在修复中
若您目前仅能通过 `Vercel` 进行部署,那么请暂时不要使用最新版本

## ⚠️ 须知

- 本项目为了避免频繁请求官方数据,默认对数据做了缓存处理,默认为 `60` 分钟,如需更改,请自行修改配置
Expand Down
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "dailyhot-api",
"version": "2.0.0-rc.5",
"version": "2.0.0",
"description": "An Api on Today's Hot list",
"keywords": [
"API",
Expand Down Expand Up @@ -31,8 +31,8 @@
"scripts": {
"format": "prettier --write .",
"lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts,.vue --fix",
"dev": "tsx watch --no-cache src/index.ts",
"dev:cache": "tsx watch src/index.ts",
"dev": "cross-env NODE_ENV=development tsx watch --no-cache src/index.ts",
"dev:cache": "cross-env NODE_ENV=development tsx watch src/index.ts",
"build": "tsc --project tsconfig.json",
"start": "tsx src/index.ts"
},
Expand All @@ -56,6 +56,7 @@
"@types/node": "^20.14.1",
"@typescript-eslint/eslint-plugin": "^7.12.0",
"@typescript-eslint/parser": "^7.12.0",
"cross-env": "^7.0.3",
"eslint": "^8.57.0",
"prettier": "^3.3.0",
"tsx": "^3.14.0",
Expand Down
12 changes: 12 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 0 additions & 6 deletions public/ico/powered-by-vercel.svg

This file was deleted.

4 changes: 3 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ const serveHotApi = (port: number = config.PORT) => {
}
};

serveHotApi();
if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "docker") {
serveHotApi(config.PORT);
}

export default serveHotApi;
35 changes: 31 additions & 4 deletions src/registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
let allRoutePath: Array<string> = [];
const routersDirName: string = "routes";

// 排除路由
const excludeRoutes: Array<string> = ["52pojie", "hostloc"];

// 建立完整目录路径
const routersDirPath = path.join(__dirname, routersDirName);

Expand Down Expand Up @@ -47,6 +50,10 @@ if (fs.existsSync(routersDirPath) && fs.statSync(routersDirPath).isDirectory())
// 注册全部路由
for (let index = 0; index < allRoutePath.length; index++) {
const router = allRoutePath[index];
// 是否处于排除名单
if (excludeRoutes.includes(router)) {
continue;
}
const listApp = app.basePath(`/${router}`);
// 返回榜单
listApp.get("/", async (c) => {
Expand Down Expand Up @@ -85,6 +92,16 @@ for (let index = 0; index < allRoutePath.length; index++) {
...listData,
});
});
// 请求方式错误
listApp.all("*", (c) =>
c.json(
{
code: 405,
message: "Method Not Allowed",
},
405,
),
);
}

// 获取全部路由
Expand All @@ -93,10 +110,20 @@ app.get("/all", (c) =>
{
code: 200,
count: allRoutePath.length,
routes: allRoutePath.map((path) => ({
name: path,
path: `/${path}`,
})),
routes: allRoutePath.map((path) => {
// 是否处于排除名单
if (excludeRoutes.includes(path)) {
return {
name: path,
path: null,
message: "该接口暂时下线",
};
}
return {
name: path,
path: `/${path}`,
};
}),
},
200,
),
Expand Down
3 changes: 2 additions & 1 deletion src/utils/getToken/weread.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import crypto from "crypto";

/**
Expand All @@ -13,7 +14,7 @@ const getWereadID = (bookId: string) => {
// 取哈希结果的前三个字符作为初始值
let strSub = str.substring(0, 3);
// 判断书籍 ID 的类型并进行转换
let fa;
let fa: (string | any[])[];
if (/^\d*$/.test(bookId)) {
// 如果书籍 ID 只包含数字,则将其拆分成长度为 9 的子字符串,并转换为十六进制表示
const chunks = [];
Expand Down
Loading

0 comments on commit 14bc5a1

Please sign in to comment.