1 | const webpack = require('webpack')
|
2 | const path = require('path')
|
3 | const HtmlWebpackPlguin = require('html-webpack-plugin')
|
4 |
|
5 | module.exports = {
|
6 | mode: 'production',
|
7 | entry: {
|
8 | 'app.min': [
|
9 | './src/js/app.js',
|
10 | ],
|
11 | },
|
12 | resolve: {
|
13 | extensions: ['*', '.js'],
|
14 | modules: [
|
15 | 'node_modules',
|
16 | path.join(__dirname, 'src/js'),
|
17 | ],
|
18 | },
|
19 | output: {
|
20 | path: path.join(__dirname, 'dist'),
|
21 | filename: 'js/[name].js',
|
22 | publicPath: './',
|
23 | },
|
24 | module: {
|
25 | rules: [
|
26 | {
|
27 | test: /\.scss$/,
|
28 | exclude: /(node_modules)/,
|
29 | include: [
|
30 | path.resolve(__dirname, 'src/scss'),
|
31 | ],
|
32 | use: [
|
33 | {
|
34 | loader: 'style-loader',
|
35 | },
|
36 | {
|
37 | loader: 'css-loader',
|
38 | },
|
39 | {
|
40 | loader: 'postcss-loader',
|
41 | options: {
|
42 | plugins: (loader) => [
|
43 | require('postcss-flexbugs-fixes')(),
|
44 | require('autoprefixer')(),
|
45 | require('cssnano')(),
|
46 | ],
|
47 | },
|
48 | },
|
49 | {
|
50 | loader: 'sass-loader',
|
51 | },
|
52 | ],
|
53 | },
|
54 | {
|
55 | test: /\.(js|jsx)$/,
|
56 | exclude: /(node_modules)/,
|
57 | include: [
|
58 | path.resolve(__dirname, 'src/js'),
|
59 | ],
|
60 | use: [
|
61 | {
|
62 | loader: 'babel-loader',
|
63 | options: {
|
64 | cacheDirectory: false,
|
65 | },
|
66 | },
|
67 | ],
|
68 | },
|
69 | {
|
70 | test: /\.(js|jsx)$/,
|
71 | exclude: /(node_modules)/,
|
72 | include: [
|
73 | path.resolve(__dirname, 'src/js'),
|
74 | ],
|
75 | use: [
|
76 | {
|
77 | loader: 'eslint-loader',
|
78 | options: {
|
79 | },
|
80 | },
|
81 | ],
|
82 | },
|
83 | ],
|
84 | },
|
85 | devServer: {
|
86 | contentBase: './dist',
|
87 | publicPath: '/',
|
88 | port: 8080,
|
89 | },
|
90 | plugins: [
|
91 | new HtmlWebpackPlguin({
|
92 | filename: 'index.html',
|
93 | template: './src/templates/index.ejs',
|
94 | }),
|
95 | ],
|
96 | }
|