Codexshaper /
wpb-framework
| 1 | const webpack = require('webpack'); |
||
|
0 ignored issues
–
show
Unused Code
introduced
by
Loading history...
|
|||
| 2 | const path = require('path'); |
||
| 3 | const package = require('./package.json'); |
||
|
0 ignored issues
–
show
|
|||
| 4 | const VueLoaderPlugin = require('vue-loader/lib/plugin'); |
||
| 5 | const HtmlWebpackPlugin = require('html-webpack-plugin'); |
||
|
0 ignored issues
–
show
|
|||
| 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
|
|||
| 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 | } |