Next.js打包时静态资源配置
Next.js打包时,如果选用standalone模型,则默认public和static不会打包,如果靠每次手动复制就比较麻烦。可通过脚本在每次打包时自动复制。
Next.js打包时,如果选用standalone模型,则默认public和static不会打包,如果靠每次手动复制就比较麻烦。可通过脚本在每次打包时自动复制。
next.config.js
打包设置为standalone模式
const nextConfig: NextConfig = {
output: "standalone",
};
新增文件
scripts/copy-standalone-assets.mjs
import { cpSync, existsSync, mkdirSync } from "node:fs";
import { join } from "node:path";
const root = process.cwd();
const standaloneDir = join(root, ".next", "standalone");
if (!existsSync(standaloneDir)) {
console.error(
"Missing .next/standalone. Set output: 'standalone' in next.config and run next build first."
);
process.exit(1);
}
const publicDir = join(root, "public");
const staticDir = join(root, ".next", "static");
if (existsSync(publicDir)) {
cpSync(publicDir, join(standaloneDir, "public"), { recursive: true });
console.log("Copied public -> .next/standalone/public");
}
if (!existsSync(staticDir)) {
console.error("Missing .next/static after build.");
process.exit(1);
}
const standaloneNextDir = join(standaloneDir, ".next");
mkdirSync(standaloneNextDir, { recursive: true });
cpSync(staticDir, join(standaloneNextDir, "static"), { recursive: true });
console.log("Copied .next/static -> .next/standalone/.next/static");
修改package.json
"scripts": {
"dev": "next dev",
"build": "next build && node scripts/copy-standalone-assets.mjs",
},
启动项目
module.exports = {
apps: [
{
name: 'nextjsblog',
exec_mode: 'fork',
instances: 1,
script: './standalone/server.js',
env: {
PORT: 5000,
NODE_ENV: 'production',
DATABASE_URL: "mysql://user1:password1@1.1.1.1:3306/database1",
},
},
],
}
next.js