forked from typeofweb-org/devfaq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
next.config.js
95 lines (79 loc) · 2.42 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
const isProduction = process.env.NODE_ENV === 'production';
require('dotenv').config({
path: isProduction ? `.env.${process.env.ENV}` : '.env',
});
const withImages = require('next-images');
const withOffline = require('next-offline');
const LodashModuleReplacementPlugin = require('lodash-webpack-plugin');
const regexEqual = (x, y) => {
return (
x instanceof RegExp &&
y instanceof RegExp &&
x.source === y.source &&
x.global === y.global &&
x.ignoreCase === y.ignoreCase &&
x.multiline === y.multiline
);
};
const withPolyfills = (module.exports = (nextConfig = {}) => {
return Object.assign({}, nextConfig, {
webpack(config, options) {
const originalEntry = config.entry;
config.entry = function entry() {
return Promise.resolve(originalEntry()).then((entries) => {
if (entries['main.js']) {
entries['main.js'].unshift('./polyfills.js');
}
return entries;
});
};
const oneOf = config.module.rules.find((rule) => typeof rule.oneOf === 'object');
if (oneOf) {
const moduleSassRule = oneOf.oneOf.find((rule) =>
regexEqual(rule.test, /\.module\.(scss|sass)$/)
);
if (moduleSassRule) {
const cssLoader = moduleSassRule.use.find(({ loader }) => loader.includes('css-loader'));
if (cssLoader) {
cssLoader.options.localsConvention = 'camelCase';
}
}
}
if (typeof nextConfig.webpack === 'function') {
return nextConfig.webpack(config, options);
}
return config;
},
});
});
const config = withPolyfills(
withImages({
webpack: (config, options) => {
config.plugins.push(new LodashModuleReplacementPlugin());
return config;
},
})
);
config.exportPathMap = function () {
return {
'/about': { page: '/about' },
'/authors': { page: '/authors' },
'/regulations': { page: '/regulations' },
};
};
config.experimental = {
publicDirectory: true,
};
config.env = {
API_URL: process.env.API_URL,
VERSION: process.env.VERSION,
GA_TRACKING_ID: process.env.GA_TRACKING_ID,
ABSOLUTE_URL: process.env.ABSOLUTE_URL || 'https://' + process.env.VERCEL_URL,
SENTRY_DSN: process.env.SENTRY_DSN,
ENV: process.env.ENV,
};
const path = require('path');
config.sassOptions = {
includePaths: [path.join(__dirname, 'styles')],
};
module.exports = isProduction ? withOffline(config) : config;