| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | 'use strict'const path = require('path')const utils = require('./utils')const config = require('../config')const vueLoaderConfig = require('./vue-loader.conf')const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); //可视化依赖function resolve(dir) {    return path.join(__dirname, '..', dir)}module.exports = {    context: path.resolve(__dirname, '../'),    entry: {        app: './src/main.js'    },    output: {        path: config.build.assetsRoot,        filename: '[name].js',        publicPath: process.env.NODE_ENV === 'production' ?            config.build.assetsPublicPath : config.dev.assetsPublicPath    },    resolve: {        extensions: ['.js', '.vue', '.json'],        alias: {            'vue$': 'vue/dist/vue.esm.js',            '@': resolve('src'),        }    },    module: {        rules: [{                test: /\.vue$/,                loader: 'vue-loader',                options: vueLoaderConfig            },            {                test: /\.js$/,                loader: 'babel-loader',                include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]            },            {                test: /\.(png|jpe?g|gif|svg|cur)(\?.*)?$/,                loader: 'url-loader',                options: {                    limit: 10000,                    name: utils.assetsPath('img/[name].[hash:7].[ext]')                }                // loader: 'image-webpack-loader',  //压缩图片                // options: {                //   mozjpeg: {                //     progressive: true,                //     quality: 50                //   },                //   // optipng.enabled: false will disable optipng                //   optipng: {                //     enabled: false,                //   },                //   pngquant: {                //     quality: [0.5, 0.65],                //     speed: 4                //   },                //   gifsicle: {                //     interlaced: false,                //   },                //   //ios不支持                //   // webp: {                //   //   quality: 100                //   // }                // }            },            {                test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,                loader: 'url-loader',                options: {                    limit: 10000,                    name: utils.assetsPath('media/[name].[hash:7].[ext]')                }            },            {                test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,                loader: 'url-loader',                options: {                    limit: 10000,                    name: utils.assetsPath('fonts/[name].[hash:7].[ext]')                }            },                    ]    },    node: {        // prevent webpack from injecting useless setImmediate polyfill because Vue        // source contains it (although only uses it if it's native).        setImmediate: false,        // prevent webpack from injecting mocks to Node native modules        // that does not make sense for the client        dgram: 'empty',        fs: 'empty',        net: 'empty',        tls: 'empty',        child_process: 'empty'    },    externals: {        'vue': 'Vue',        // 'ViewUI': 'view-design',        // 'axios': 'axios',        "echarts": "echarts",    },    //  启动依赖关系可视化窗口,绑定端口8919    // plugins: [    //   new BundleAnalyzerPlugin({ analyzerPort: 8919 }),    // ]}
 |