diff --git a/.gitignore b/.gitignore index e59c02b7..af51b51a 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ pids *.pid.lock src/app/pages.json prebuild.js +prebuild.mjs # Directory for instrumented libs generated by jscoverage/JSCover lib-cov diff --git a/package.json b/package.json index 973b22f0..01869a74 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "verkfi", "version": "1.6.1", - "devVersion": "761", + "devVersion": "762", "dev": true, "description": "Platform for Neila's something useless tools.", "private": true, @@ -19,20 +19,12 @@ "url": "https://neilasite.netlify.app/" }, "scripts": { - "dev": "npm run predev && next dev", - "precommon": "npm run build:nc && npm run build:sw", - "prebuild": "npm run build:mp && node prebuild.js && npm run precommon", - "poststart": "rm prebuild.js", - "build": "next build", - "predev": "npm run build:mp && node prebuild.js dev && npm run precommon && npm run poststart", - "start": "next start", + "dev": "npm run build:pb && VERKFI_ENV=dev node prebuild.js && next dev", + "prebuild": "npm run build:pb && node prebuild.js", + "build": "npm run prebuild && build", + "build:pb": "esbuild prebuild.ts --bundle --minify --external:esbuild --platform=node --outfile=prebuild.js", "lint": "next lint", - "build:sw": "esbuild src/app/service-worker.ts --bundle --minify > public/service-worker.js", - "build:nc": "esbuild next.config.ts --bundle --minify --platform=node > next.config.js", - "build:mp": "esbuild prebuild.ts --bundle --minify --platform=node > prebuild.js", - "analyze": "ANALYZE=true npm run build", - "analyze:server": "BUNDLE_ANALYZE=server npm run build", - "analyze:browser": "BUNDLE_ANALYZE=browser npm run build" + "start": "next start" }, "dependencies": { "@emotion/react": "^11.11.3", diff --git a/prebuild.ts b/prebuild.ts index 437e050f..d4df8242 100644 --- a/prebuild.ts +++ b/prebuild.ts @@ -3,6 +3,11 @@ */ import * as fs from "node:fs"; import pack from "./package.json"; +import { + BuildResult, + Message, + build +} from "esbuild"; import type { Manifest } from "next/dist/lib/metadata/types/manifest-types"; @@ -11,7 +16,7 @@ import { getRepoInfo } from "./src/app/components/getRepoInfo"; const logger = new Logger({ - name: "ModifyPackage", + name: "prebuild", level: "log" }); import Logger from "lp-logger"; @@ -51,9 +56,36 @@ async function publicMain() { }); const pagesJSON = JSON.stringify(pages, null, 4); fs.writeFileSync("src/app/pages.json", pagesJSON); - return pagesJSON + const logbuild: (result: BuildResult, filename: string) => void = (result, filename) => { + logger.log(`正在编译${filename}……`); + const log = (message: [Message[], string]) => { + if (message[0].length === 0) { + logger.log(`编译${filename}时未出现${message[1]}。`); + } else { + message[0].forEach(warn => logger.warn(`编译${filename}时出现${message[1]}:${JSON.stringify(warn)}`)); + } + }; + log([result.errors, "错误"]); + log([result.warnings, "警告"]); + }, + NextConfig = await build({ + entryPoints: ["next.config.ts"], + outfile: "next.config.js", + bundle: true, + minify: true, + platform: "node" + }), + ServiceWorker = await build({ + entryPoints: ["src/app/service-worker.ts"], + outfile: "public/service-worker.js", + bundle: true, + minify: true + }); + logbuild(NextConfig, "next.config.ts"); + logbuild(ServiceWorker, "service-worker.ts"); + return pagesJSON; } -if (process.argv[2] === "dev") { +if (process.env.VERKFI_ENV === "dev") { devMain(); } publicMain();