Files
docs-app/next.config.js
2026-04-01 19:15:22 +02:00

107 lines
2.5 KiB
JavaScript

const MonacoWebpackPlugin = require("monaco-editor-webpack-plugin");
const redirects = require("./content/settings/config.json")?.redirects || [];
/** @type {import('next').NextConfig} */
const isStatic = process.env.EXPORT_MODE === "static";
const basePath = process.env.NEXT_PUBLIC_BASE_PATH;
const assetPrefix = process.env.NEXT_PUBLIC_ASSET_PREFIX || basePath;
const isDocker = process.env.DOCKER_BUILD === "true";
const extraConfig = {};
if (isStatic) {
extraConfig.output = "export";
extraConfig.trailingSlash = true;
extraConfig.skipTrailingSlashRedirect = true;
} else if (isDocker) {
extraConfig.output = "standalone";
}
module.exports = {
...extraConfig,
basePath,
assetPrefix,
images: {
...(assetPrefix ? { path: `${assetPrefix}/_next/image` } : {}),
remotePatterns: [
{
protocol: "https",
hostname: "assets.tina.io",
port: "",
},
],
},
outputFileTracingIncludes: {
"/api/**/*": [],
},
outputFileTracingExcludes: {
"/api/**/*": [
".next/cache/**/*",
"node_modules/@swc/core-linux-x64-gnu",
"node_modules/@swc/core-linux-x64-musl",
"node_modules/@esbuild/",
"node_modules/webpack",
"node_modules/terser",
".git/**/*",
"public/**/*",
],
},
async rewrites() {
return [
{
source: "/admin",
destination: "/admin/index.html",
},
];
},
async redirects() {
return redirects.map((redirect) => ({
source: redirect.source,
destination: redirect.destination,
permanent: redirect.permanent,
}));
},
turbopack: {
resolveExtensions: [".mdx", ".tsx", ".ts", ".jsx", ".js", ".mjs", ".json"],
// Add this rule to handle SVG as React components for Local Development
rules: {
"*.svg": {
loaders: ["@svgr/webpack"],
as: "*.js",
},
},
},
webpack: (config, { isServer }) => {
if (!isServer) {
// Configure Monaco Editor for minimal build
config.plugins.push(
new MonacoWebpackPlugin({
languages: ["javascript"],
filename: "static/[name].worker.js",
features: ["!gotoSymbol"], // Disable heavy features
})
);
}
// Add this module rule to handle SVG as React components for Production
config.module.rules.push({
test: /\.svg$/,
use: ["@svgr/webpack"],
});
// Optimize bundle size for serverless functions
if (isServer) {
config.externals = [...(config.externals || []), "fs", "path", "os"];
}
return config;
},
};