-
-
Notifications
You must be signed in to change notification settings - Fork 32
/
next.config.js
90 lines (83 loc) · 2.46 KB
/
next.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/* eslint-disable @typescript-eslint/no-var-requires */
// NOTE
// Do not change this file to .mjs
// https://github.com/contentlayerdev/contentlayer/issues/313#issuecomment-1305424923
const path = require('path');
const bundleAnalyzer = require('@next/bundle-analyzer');
const million = require('million/compiler');
const appHeaders = require('./config/next/headers');
const redirects = require('./config/next/redirects');
const withBundleAnalyzer = bundleAnalyzer({
enabled: process.env.ANALYZE === 'true',
openAnalyzer: false,
});
/*
class VeliteWebpackPlugin {
static started = false;
apply(/** @type {import('webpack').Compiler} compiler) {
// executed three times in nextjs
// twice for the server (nodejs / edge runtime) and once for the client
compiler.hooks.beforeCompile.tapPromise('VeliteWebpackPlugin', async () => {
if (VeliteWebpackPlugin.started) return;
VeliteWebpackPlugin.started = true;
const dev = compiler.options.mode === 'development';
const { build } = await import('velite');
await build({ watch: dev, clean: !dev });
});
}
}
*/
/**
* @type {import('next').NextConfig}
*/
const defaultNextConfig = {
swcMinify: true,
reactStrictMode: true,
compress: true,
crossOrigin: 'anonymous',
experimental: {
ppr: true,
// useLightningcss: true,
// optimizePackageImports: ['react-tweet'],
},
compiler: {
removeConsole: {
exclude: ['error'],
},
},
sassOptions: {
includePaths: [path.join(__dirname, 'src/styles')],
},
images: {
remotePatterns: [
{ hostname: 'i.scdn.co' },
{ hostname: 'spotify.com' },
{ hostname: 'jahir.dev' },
{ hostname: 'unavatar.io' },
{ hostname: 'source.boringavatars.com' },
{ hostname: 'raw.githubusercontent.com' },
{ hostname: 'avatars.githubusercontent.com' },
{ hostname: 'assets.literal.club' },
{ hostname: 'books.google.com' },
{ hostname: '**.pixpa.com' },
],
dangerouslyAllowSVG: true,
contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;",
formats: ['image/avif', 'image/webp'],
},
headers: () => appHeaders,
redirects: () => redirects,
// webpack: (config) => {
// config.plugins.push(new VeliteWebpackPlugin());
// return config;
// },
};
const millionConfig = {
mute: true,
auto: { rsc: true },
rsc: true,
};
const config = withBundleAnalyzer(
million.next(defaultNextConfig, millionConfig),
);
module.exports = config;