const path = require('path') const webpack = require('webpack') const MiniCssExtractPlugin = require('mini-css-extract-plugin') const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') const VueLoaderPlugin = require('vue-loader/lib/plugin') module.exports = () => { // console.log('Building vendor files for \x1b[33m%s\x1b[0m', process.env.NODE_ENV) const isDevBuild = !(process.env.NODE_ENV && process.env.NODE_ENV === 'production') const extractCSS = new MiniCssExtractPlugin({ filename: 'vendor.css' }) return [{ mode: (isDevBuild ? 'development' : 'production'), stats: { modules: false }, resolve: { extensions: ['.js'] }, module: { rules: [ { test: /\.vue$/, use: 'vue-loader', include: [ //path.resolve(__dirname, '/ClientApp/'), //path.resolve(__dirname, '/node_modules/'), path.resolve(__dirname, '/') ] }, { test: /\.js$/, use: 'babel-loader', include: [ //path.resolve(__dirname, '/ClientApp/'), //path.resolve(__dirname, '/node_modules/'), path.resolve(__dirname, '/') ] }, { test: /\.css$/, use: isDevBuild ? ['style-loader', 'css-loader'] : [MiniCssExtractPlugin.loader, 'css-loader'] }, { test: /\.(png|jpg|jpeg|gif|svg)$/, use: 'url-loader?limit=25000' }, { test: /\.(eot|ttf|woff|woff2)$/, loader: 'file-loader' }, { test: /\.less$/, use: [{ loader: "style-loader" }, { loader: "css-loader" }, { loader: "less-loader", options: { javascriptEnabled: true } }] } ] }, entry: { vendor: ['event-source-polyfill', 'vue', 'vuex', 'axios', 'vue-router'] }, output: { path: path.join(__dirname, 'wwwroot', 'dist'), publicPath: '/dist/', filename: '[name].js', library: '[name]_[hash]' }, plugins: [ new VueLoaderPlugin(), extractCSS, new OptimizeCSSPlugin({ cssProcessorOptions: { safe: true } }), new webpack.DllPlugin({ path: path.join(__dirname, 'wwwroot', 'dist', '[name]-manifest.json'), name: '[name]_[hash]' }) ] }] }