6bd751957c
CI Pipeline / test (20) (pull_request) Successful in 3m0s
CI Pipeline / test (18) (pull_request) Successful in 3m18s
CI Pipeline / e2e (firefox) (pull_request) Successful in 3m20s
CI Pipeline / e2e (chromium) (pull_request) Successful in 3m54s
CI Pipeline / e2e (webkit) (pull_request) Successful in 3m41s
CI Pipeline / performance (pull_request) Successful in 3m3s
CI Pipeline / visual-regression (pull_request) Successful in 7m12s
CI Pipeline / storybook (pull_request) Successful in 1m29s
CI Pipeline / lint (pull_request) Failing after 1m7s
CI Pipeline / build (pull_request) Successful in 1m20s
102 lines
2.3 KiB
JavaScript
102 lines
2.3 KiB
JavaScript
import createMDX from "@next/mdx";
|
|
|
|
/** @type {import('next').NextConfig} */
|
|
const nextConfig = {
|
|
eslint: {
|
|
ignoreDuringBuilds: true,
|
|
},
|
|
// Performance optimizations
|
|
experimental: {
|
|
optimizeCss: true,
|
|
optimizePackageImports: ["react", "react-dom"],
|
|
},
|
|
// Compression
|
|
compress: true,
|
|
// Image optimization
|
|
images: {
|
|
formats: ["image/webp", "image/avif"],
|
|
minimumCacheTTL: 60,
|
|
dangerouslyAllowSVG: true,
|
|
contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;",
|
|
},
|
|
// Headers for caching
|
|
async headers() {
|
|
return [
|
|
{
|
|
source: "/(.*)",
|
|
headers: [
|
|
{
|
|
key: "X-Content-Type-Options",
|
|
value: "nosniff",
|
|
},
|
|
{
|
|
key: "X-Frame-Options",
|
|
value: "DENY",
|
|
},
|
|
{
|
|
key: "X-XSS-Protection",
|
|
value: "1; mode=block",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
source: "/static/(.*)",
|
|
headers: [
|
|
{
|
|
key: "Cache-Control",
|
|
value: "public, max-age=31536000, immutable",
|
|
},
|
|
],
|
|
},
|
|
];
|
|
},
|
|
webpack(config, { dev, isServer }) {
|
|
// SVG handling
|
|
config.module.rules.push({
|
|
test: /\.svg$/,
|
|
issuer: /\.[jt]sx?$/,
|
|
use: ["@svgr/webpack"],
|
|
});
|
|
|
|
// Bundle analysis - only in production builds
|
|
if (process.env.ANALYZE === "true" && !dev) {
|
|
try {
|
|
const BundleAnalyzerPlugin =
|
|
require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
|
|
config.plugins.push(
|
|
new BundleAnalyzerPlugin({
|
|
analyzerMode: "static",
|
|
openAnalyzer: false,
|
|
reportFilename: isServer
|
|
? "../analyze/server.html"
|
|
: "../analyze/client.html",
|
|
}),
|
|
);
|
|
} catch (error) {
|
|
console.warn("Bundle analyzer not available:", error.message);
|
|
}
|
|
}
|
|
|
|
// Production optimizations
|
|
if (!dev && !isServer) {
|
|
// Tree shaking optimization
|
|
config.optimization = {
|
|
...config.optimization,
|
|
usedExports: true,
|
|
sideEffects: false,
|
|
};
|
|
}
|
|
|
|
return config;
|
|
},
|
|
};
|
|
|
|
const withMDX = createMDX({
|
|
options: {
|
|
remarkPlugins: [],
|
|
rehypePlugins: [],
|
|
},
|
|
});
|
|
|
|
export default withMDX(nextConfig);
|