-
Notifications
You must be signed in to change notification settings - Fork 0
/
next.config.js
91 lines (80 loc) · 2.23 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
require('dotenv').config();
const path = require('path');
const nextEnv = require('next-env');
const withTypescript = require('@zeit/next-typescript');
const withCSS = require('@zeit/next-css');
const Dotenv = require('dotenv-webpack');
const FilterWarningsPlugin = require('webpack-filter-warnings-plugin');
const withNextEnv = nextEnv();
const webpackImport = require('webpack');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer')
.BundleAnalyzerPlugin;
const compose = require('lodash/fp/compose');
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
const withOffline = moduleExists('next-offline')
? require('next-offline')
: config => config;
if (typeof require !== 'undefined') {
require.extensions['.css'] = file => {};
}
const BASE_CONFIG = {
target: 'serverless',
generateInDevMode: false,
generateSw: false,
dontAutoRegisterSw: true,
devSwSrc: './static/service-worker.js',
workboxOpts: {
swSrc: 'static/service-worker.js',
swDest: 'static/service-worker.js'
},
webpack: config => {
config.plugins = config.plugins || [];
config.module.rules.push({
loader: 'webpack-ant-icon-loader',
enforce: 'pre',
include: [path.resolve('node_modules/@ant-design/icons/lib/dist')]
});
config.module.rules.push({
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
use: [
{
loader: 'babel-loader'
},
{
loader: '@svgr/webpack',
options: {
babel: false,
icon: true
}
}
]
});
// paths from tsconfig
if (config.resolve.plugins) {
config.resolve.plugins.push(new TsconfigPathsPlugin());
} else {
config.resolve.plugins = [new TsconfigPathsPlugin()];
}
config.plugins.push(
new FilterWarningsPlugin({
exclude: /mini-css-extract-plugin[^]*Conflicting order between:/
})
);
config.plugins.push(new webpackImport.IgnorePlugin(/\/iconv-loader$/));
config.plugins.push(new Dotenv());
return config;
}
};
module.exports = compose(
withNextEnv,
withTypescript,
withCSS,
withOffline
)(BASE_CONFIG);
function moduleExists(name) {
try {
return require.resolve(name);
} catch (error) {
return false;
}
}