Passed
Push — master ( 4b36f5...3b4cd1 )
by CodexShaper
71:50 queued 63:17
created

webpack.config.js   A

Complexity

Total Complexity 4
Complexity/F 2

Size

Lines of Code 155
Function Count 2

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 95
c 0
b 0
f 0
dl 0
loc 155
rs 10
wmc 4
mnd 2
bc 2
fnc 2
bpm 1
cpm 2
noi 4

1 Function

Rating   Name   Duplication   Size   Complexity  
A ➔ isProduction 0 3 1
1
const webpack = require('webpack');
0 ignored issues
show
Unused Code introduced by
The constant webpack seems to be never used. Consider removing it.
Loading history...
2
const path = require('path');
3
const package = require('./package.json');
0 ignored issues
show
Unused Code introduced by
The constant package seems to be never used. Consider removing it.
Loading history...
4
const VueLoaderPlugin = require('vue-loader/lib/plugin');
5
const HtmlWebpackPlugin = require('html-webpack-plugin');
0 ignored issues
show
Unused Code introduced by
The constant HtmlWebpackPlugin seems to be never used. Consider removing it.
Loading history...
6
const TerserJSPlugin = require('terser-webpack-plugin');
7
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
8
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
9
// const config = require( './config.json' );
10
11
const devMode = process.env.NODE_ENV !== 'production';
12
13
// Naming and path settings
14
var appName = 'wpb';
0 ignored issues
show
Unused Code introduced by
The assignment to variable appName seems to be never used. Consider removing it.
Loading history...
15
var entryPoint = {
16
  frontend: './resources/js/frontend/main.js',
17
  admin: './resources/js/admin/main.js',
18
  spa: './resources/js/spa/main.js',
19
  style: './resources/sass/app.scss'
20
};
21
22
var exportPath = path.resolve(__dirname, './public/js');
23
24
// Enviroment flag
25
var plugins = [];
26
var env = process.env.NODE_ENV;
27
28
function isProduction() {
29
  return process.env.NODE_ENV === 'production';
30
}
31
32
// extract css into its own file
33
plugins.push(new MiniCssExtractPlugin({
34
  filename: '../css/[name].css',
35
  ignoreOrder: false, // Enable to remove warnings about conflicting order
36
}));
37
38
// plugins.push(new BrowserSyncPlugin( {
39
//   proxy: {
40
//     target: config.proxyURL
41
//   },
42
//   files: [
43
//     '**/*.php'
44
//   ],
45
//   cors: true,
46
//   reloadDelay: 0
47
// } ));
48
49
plugins.push(new VueLoaderPlugin());
50
51
// Differ settings based on production flag
52
if ( devMode ) {
53
  appName = '[name].js';
54
} else {
55
  appName = '[name].min.js';
56
}
57
58
module.exports = {
59
  entry: entryPoint,
60
  mode: devMode ? 'development' : 'production',
61
  output: {
62
    path: exportPath,
63
    filename: appName,
64
  },
65
66
  resolve: {
67
    alias: {
68
      'vue$': 'vue/dist/vue.esm.js',
69
      '@': path.resolve('./resources/'),
70
      'frontend': path.resolve('./resources/frontend/'),
71
      'admin': path.resolve('./resources/admin/'),
72
      'spa': path.resolve('./resources/spa/'),
73
    },
74
    modules: [
75
      path.resolve('./node_modules'),
76
      path.resolve(path.join(__dirname, 'resources/')),
77
    ]
78
  },
79
80
  optimization: {
81
    runtimeChunk: 'single',
82
    splitChunks: {
83
      cacheGroups: {
84
        vendor: {
85
          test: /[\\\/]node_modules[\\\/]/,
86
          name: 'vendors',
87
          chunks: 'all'
88
        }
89
      }
90
    },
91
    minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],
92
  },
93
94
  plugins,
95
96
  module: {
97
    rules: [
98
      {
99
        test: /\.vue$/,
100
        loader: 'vue-loader'
101
      },
102
      {
103
        test: /\.js$/,
104
        use: 'babel-loader',
105
        exclude: /node_modules/
106
      },
107
      {
108
        test: /\.scss$/,
109
        use: [
110
          'vue-style-loader',
111
          'css-loader',
112
          'sass-loader'
113
        ]
114
      },
115
      {
116
        test: /\.less$/,
117
        use: [
118
          'vue-style-loader',
119
          'css-loader',
120
          'less-loader'
121
        ]
122
      },
123
      {
124
        test: /\.png$/,
125
        use: [
126
          {
127
            loader: 'url-loader',
128
            options: {
129
              mimetype: 'image/png'
130
            }
131
          }
132
        ]
133
      },
134
      {
135
        test: /\.svg$/,
136
        use: 'file-loader'
137
      },
138
      {
139
        test: /\.css$/,
140
        use: [
141
          {
142
            loader: MiniCssExtractPlugin.loader,
143
            options: {
144
              publicPath: (resourcePath, context) => {
145
                return path.relative(path.dirname(resourcePath), context) + '/';
146
              },
147
              hmr: process.env.NODE_ENV === 'development',
148
            },
149
          },
150
          'css-loader',
151
        ],
152
      },
153
    ]
154
  },
155
}