-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnext.config.js
129 lines (123 loc) · 3.82 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
module.exports = {
target: 'serverless',
future: {
webpack5: true
},
reactStrictMode: true,
// images: { Place your image domains here
// domains: [
// ]
// },
async headers() {
return [
{
source: '/(.*)',
headers: securityHeaders
}
];
},
webpack: function (config, { dev, isServer }) {
if (isServer) {
// generates rss feed for the blog
require('./utils/scripts/rss');
// const originalEntry = config.entry;
// config.entry = async () => {
// const entries = { ...(await originalEntry()) };
// // These scripts can import components from the app and use ES modules
// entries['./utils/scripts/rss.js'] = './utils/scripts/rss.js';
// return entries;
// };
// require('./utils/scripts/test-rss.js');
// require('./utils/scripts/rss.js');
}
// TODO: Test Preact support during next deploy
// Replace React with Preact only in client production build
// My 3D rendering page is not working in preact
// if (!dev && !isServer) {
// Object.assign(config.resolve.alias, {
// react: 'preact/compat',
// 'react-dom/test-utils': 'preact/test-utils',
// 'react-dom': 'preact/compat'
// });
// }
config.resolve.fallback = {
// if you miss it, all the other options in fallback, specified
...config.resolve.fallback,
fs: false,
child_process: false
// path: false,
};
return config;
}
};
// https://securityheaders.com
// https://content-security-policy.com/
// Do not forget to modify script-src, in case I add something new
// default-src * data: 'self' 'unsafe-eval' 'unsafe-inline' blob:;
const ContentSecurityPolicy = `
default-src 'self';
script-src 'self' 'unsafe-eval' 'unsafe-inline' *.youtube.com *.twitter.com blob:;
worker-src 'self' blob:;
child-src *.youtube.com *.google.com *.twitter.com;
style-src 'self' 'unsafe-inline' *.googleapis.com;
img-src * blob: data:;
media-src * blob: data:;
connect-src *;
font-src 'self' data:;
`;
const securityHeaders = [
// https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
{
key: 'Content-Security-Policy',
value: ContentSecurityPolicy.replace(/\n/g, '')
},
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
{
key: 'Referrer-Policy',
value: 'origin-when-cross-origin'
},
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
{
key: 'X-Frame-Options',
value: 'SAMEORIGIN'
},
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
{
key: 'X-Content-Type-Options',
value: 'nosniff'
},
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control
{
key: 'X-DNS-Prefetch-Control',
value: 'on'
},
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
{
key: 'Strict-Transport-Security',
value: 'max-age=31536000; includeSubDomains; preload'
},
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy
// Opt-out of Google FLoC: https://amifloced.org/
{
key: 'Permissions-Policy',
value: 'camera=(), microphone=(), geolocation=(), interest-cohort=()'
}
];
// const withPWA = require('next-pwa');
// module.exports = withPWA({
// pwa: {
// disable:
// process.env.NODE_ENV === 'development' ||
// process.env.NODE_ENV === 'preview' ||
// process.env.NODE_ENV === 'production',
// // delete two lines above to enable PWA in production deployment
// // add your own icons to public/manifest.json
// // to re-generate manifest.json, you can visit https://tomitm.github.io/appmanifest/
// dest: 'public',
// register: true
// },
// target: 'serverless',
// future: {
// webpack5: true
// }
// });