| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- const path = require('path')
- const webpack = require('webpack')
- const { VueLoaderPlugin } = require('vue-loader')
- const CompressionPlugin = require('compression-webpack-plugin')
-
- const PostCssPlugins = [
- require('postcss-import'),
- require('precss'),
- require('autoprefixer')
- ]
-
- module.exports = (env = {}) => {
- return {
- mode: env.production ? 'production' : 'development',
- module: {
- rules: [{
- test: /\.vue$/,
- use: ['vue-loader']
- },
- {
- test: /\.(js)$/,
- loader: 'babel-loader',
- exclude: /node_modules/
- },
- {
- test: /\.pug$/,
- oneOf: [
- // this applies to `<template lang="pug">` in Vue components
- {
- resourceQuery: /^\?vue/,
- use: ['pug-plain-loader']
- }
- ]
- },
- {
- test: /\.(png|jpg|gif|svg|ttf|woff2|woff)$/,
- loader: 'url-loader',
- options: {
- limit: 10000,
- name: '[name].[ext]?[hash]'
- }
- },
- {
- test: /(\.html$|favicon)/,
- loader: 'file-loader',
- options: {
- name: '[name].[ext]'
- }
- },
- {
- test: /\.(css|sss|postcss)$/,
- use: [{
- loader: 'vue-style-loader'
- },
- {
- loader: 'postcss-loader',
- options: {
- parser: 'sugarss',
- plugins: () => {
- return PostCssPlugins
- }
- }
- }
- ]
- }
- ]
- },
- output: {
- path: path.join(__dirname, 'public'),
- publicPath: '/'
- },
- devServer: {
- historyApiFallback: true
- },
- devtool: env.production ? false : 'cheap-module-eval-source-map',
- plugins: [
- new webpack.DefinePlugin({
- PRODUCTION: JSON.stringify(env.production)
- }),
- new VueLoaderPlugin(),
- new CompressionPlugin()
- ]
- }
- }
|