1 | const path = require('path');
|
2 | const autoprefixer = require('autoprefixer');
|
3 | const webpack = require('webpack');
|
4 | const merge = require('webpack-merge');
|
5 |
|
6 | const base = require('./base');
|
7 |
|
8 | module.exports = arg =>
|
9 | merge(base(arg), {
|
10 | mode: 'development',
|
11 |
|
12 | module: {
|
13 | rules: [
|
14 | {
|
15 | test: /\.jsx?$/,
|
16 | include: path.resolve(arg.context, './src'),
|
17 | loader: 'babel-loader',
|
18 | options: arg.options.noBabelConfig
|
19 | ? {}
|
20 | : {
|
21 | presets: [
|
22 | [
|
23 | '@babel/preset-env',
|
24 | {
|
25 | targets: arg.options.browsers,
|
26 | modules: false,
|
27 | loose: true,
|
28 | useBuiltIns: 'entry',
|
29 | configPath: arg.context,
|
30 | shippedProposals: true,
|
31 | },
|
32 | ],
|
33 | '@babel/preset-react',
|
34 | ],
|
35 | plugins: [
|
36 | ['@babel/plugin-proposal-class-properties', { loose: true }],
|
37 | ['@babel/plugin-proposal-decorators', { legacy: true }],
|
38 | '@babel/plugin-proposal-export-default-from',
|
39 | '@babel/plugin-proposal-export-namespace-from',
|
40 | '@babel/plugin-proposal-optional-chaining',
|
41 | '@babel/plugin-proposal-numeric-separator',
|
42 | '@babel/plugin-proposal-throw-expressions',
|
43 | ],
|
44 | },
|
45 | },
|
46 | {
|
47 | test: /\.css$/,
|
48 | oneOf: [
|
49 | {
|
50 | exclude: /node_modules/,
|
51 | use: [
|
52 | 'style-loader',
|
53 | {
|
54 | loader: 'css-loader',
|
55 | options: { modules: arg.options.cssModules, camelCase: 'only', importLoaders: 1 },
|
56 | },
|
57 | {
|
58 | loader: 'postcss-loader',
|
59 | options: {
|
60 | ident: 'postcss',
|
61 | plugins: () => [autoprefixer({ browsers: arg.options.browsers })],
|
62 | },
|
63 | },
|
64 | ],
|
65 | },
|
66 | {
|
67 | include: /node_modules/,
|
68 | use: [
|
69 | 'style-loader',
|
70 | {
|
71 | loader: 'css-loader',
|
72 | options: { importLoaders: 1 },
|
73 | },
|
74 | {
|
75 | loader: 'postcss-loader',
|
76 | options: {
|
77 | ident: 'postcss',
|
78 | plugins: () => [autoprefixer({ browsers: arg.options.browsers })],
|
79 | },
|
80 | },
|
81 | ],
|
82 | },
|
83 | ],
|
84 | },
|
85 | {
|
86 | test: /\.less$/,
|
87 | oneOf: [
|
88 | {
|
89 | exclude: /node_modules/,
|
90 | use: [
|
91 | 'style-loader',
|
92 | {
|
93 | loader: 'css-loader',
|
94 | options: { modules: arg.options.cssModules, camelCase: 'only', importLoaders: 1 },
|
95 | },
|
96 | {
|
97 | loader: 'postcss-loader',
|
98 | options: {
|
99 | ident: 'postcss',
|
100 | plugins: () => [autoprefixer({ browsers: arg.options.browsers })],
|
101 | },
|
102 | },
|
103 | 'less-loader',
|
104 | ],
|
105 | },
|
106 | {
|
107 | include: /node_modules/,
|
108 | use: [
|
109 | 'style-loader',
|
110 | {
|
111 | loader: 'css-loader',
|
112 | options: { importLoaders: 1 },
|
113 | },
|
114 | {
|
115 | loader: 'postcss-loader',
|
116 | options: {
|
117 | ident: 'postcss',
|
118 | plugins: () => [autoprefixer({ browsers: arg.options.browsers })],
|
119 | },
|
120 | },
|
121 | 'less-loader',
|
122 | ],
|
123 | },
|
124 | ],
|
125 | },
|
126 | ],
|
127 | },
|
128 |
|
129 | plugins: [
|
130 | new webpack.DefinePlugin({
|
131 | __ENV__: JSON.stringify('dev'),
|
132 | }),
|
133 | ],
|
134 |
|
135 | performance: {
|
136 | hints: false,
|
137 | },
|
138 | });
|