From b7348e4be3cc38571f2448d133d1763435edde78 Mon Sep 17 00:00:00 2001 From: undefined Date: Wed, 15 Sep 2021 12:29:18 +0800 Subject: [PATCH] core: serve static files without copy --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/entry/setup.ts | 4 ---- packages/hydrooj/src/init.ts | 1 + packages/hydrooj/src/loader.ts | 8 ++------ packages/hydrooj/src/service/server.ts | 12 +++--------- 5 files changed, 7 insertions(+), 20 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 5a1b6a27b..5203860dc 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.34.8", + "version": "2.34.9", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/entry/setup.ts b/packages/hydrooj/src/entry/setup.ts index f56ffddf4..3039d07e1 100644 --- a/packages/hydrooj/src/entry/setup.ts +++ b/packages/hydrooj/src/entry/setup.ts @@ -5,7 +5,6 @@ import cac from 'cac'; import fs from 'fs-extra'; import Koa, { Context } from 'koa'; import Body from 'koa-body'; -import cache from 'koa-static-cache'; import mongodb from 'mongodb'; import { Logger } from '../logger'; @@ -117,9 +116,6 @@ export function load() { const server = http.createServer(app.callback()); app.keys = ['Hydro']; app - .use(cache(path.join(os.tmpdir(), 'hydro', 'public'), { - maxAge: 365 * 24 * 60 * 60, - })) .use(Body()) .use((ctx) => { if (ctx.request.method.toLowerCase() === 'post') return post(ctx); diff --git a/packages/hydrooj/src/init.ts b/packages/hydrooj/src/init.ts index fb3785435..656787860 100644 --- a/packages/hydrooj/src/init.ts +++ b/packages/hydrooj/src/init.ts @@ -34,4 +34,5 @@ if (!global.Hydro) { locales: {}, }; global.addons = []; + global.publicDirs = []; } diff --git a/packages/hydrooj/src/loader.ts b/packages/hydrooj/src/loader.ts index 61e025a7d..2f679aae1 100644 --- a/packages/hydrooj/src/loader.ts +++ b/packages/hydrooj/src/loader.ts @@ -4,7 +4,6 @@ import 'reflect-metadata'; import './init'; import './interface'; -import os from 'os'; import path from 'path'; import fs from 'fs-extra'; import './utils'; @@ -24,8 +23,6 @@ logger.debug('%o', argv); process.on('unhandledRejection', logger.error); process.on('uncaughtException', logger.error); -const publicTemp = path.resolve(os.tmpdir(), 'hydro', 'public'); - export function addon(addonPath: string, prepend = false) { if (!(fs.existsSync(addonPath) && fs.statSync(addonPath).isFile())) { try { @@ -33,9 +30,8 @@ export function addon(addonPath: string, prepend = false) { const packagejson = require.resolve(`${addonPath}/package.json`); const modulePath = path.dirname(packagejson); const publicPath = path.resolve(modulePath, 'public'); - if (fs.existsSync(publicPath)) fs.copySync(publicPath, publicTemp); - if (prepend) global.addons.unshift(modulePath); - else global.addons.push(modulePath); + if (fs.existsSync(publicPath)) global.publicDirs[prepend ? 'push' : 'unshift'](publicPath); + global.addons[prepend ? 'unshift' : 'push'](modulePath); } catch (e) { logger.error(`Addon not found: ${addonPath}`); } diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index 4ad16d645..b7429054c 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -1,8 +1,6 @@ import assert from 'assert'; import { createHash } from 'crypto'; import http from 'http'; -import os from 'os'; -import { resolve } from 'path'; import { PassThrough } from 'stream'; import cac from 'cac'; import Cookies from 'cookies'; @@ -252,13 +250,9 @@ export async function prepare() { rewrite: (p) => p.replace('/fs', ''), })); app.use(Compress()); - if (argv.options.public) { - app.use(cache(argv.options.public, { - maxAge: 0, - })); - } else { - app.use(cache(resolve(os.tmpdir(), 'hydro', 'public'), { - maxAge: 30 * 24 * 60 * 60, + for (const dir of global.publicDirs) { + app.use(cache(dir, { + maxAge: argv.options.public ? 0 : 24 * 3600 * 1000, })); } if (process.env.DEV) {