vue.config.js 4.47 KB
Newer Older
wanli's avatar
wanli committed
1 2 3 4
"use strict";
const path = require("path");

function resolve(dir) {
5
    return path.join(__dirname, dir);
wanli's avatar
wanli committed
6 7 8 9
}

// All configuration item explanations can be find in https://cli.vuejs.org/config/
module.exports = {
10 11 12 13 14 15 16 17 18 19 20 21
    /**
     * You will need to set publicPath if you plan to deploy your site under a sub path,
     * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
     * then publicPath should be set to "/bar/".
     * In most cases please use '/' !!!
     * Detail: https://cli.vuejs.org/config/#publicpath
     */
    publicPath: "/",
    outputDir: "dist",
    productionSourceMap: false,
    css: {
        sourceMap: true,
wanli's avatar
wanli committed
22
    },
23 24 25 26 27 28
    devServer: {
        port: 8080,
        open: true,
        overlay: {
            warnings: false,
            errors: true,
wanli's avatar
wanli committed
29
        },
30 31 32 33
        proxy: {
            // change xxx-api/login => mock/login
            // detail: https://cli.vuejs.org/config/#devserver-proxy
            "/api/v1": {
wanli's avatar
wanli committed
34
                target: "http://127.0.0.1:5001/",
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
                changeOrigin: true,
                pathRewrite: {},
            },
            "/api/v1/kxpms": {
                target: "http://192.168.1.106:5000/",
                changeOrigin: true,
                pathRewrite: {
                    "^/online": "/",
                    // 这里理解成用/api代替target里面的地址,后面组件中我们调用接口时直接用api代替
                    // 比如我要调用'http://40.00.100.100:3002/user/add',直接写'/api/user/add'即可
                },
            },
            "/uowap/": {
                target: "https://web-drcn.hispace.dbankcloud.cn/",
                changeOrigin: true,
                pathRewrite: {},
            },
        },
        // after: require("./mock/mock-server.js"),
wanli's avatar
wanli committed
54
    },
55 56 57
    configureWebpack: (config) => {
        // debug JS
        config.devtool = "source-map";
wanli's avatar
wanli committed
58

59 60 61 62 63 64 65
        config.externals = {
            'gsap': 'gsap'
        }
    },
    chainWebpack(config) {
        config.plugins.delete("preload"); // TODO: need test
        config.plugins.delete("prefetch"); // TODO: need test
wanli's avatar
wanli committed
66

67 68 69 70 71 72 73 74 75 76 77 78 79
        // set svg-sprite-loader
        config.module.rule("svg").exclude.add(resolve("src/icons")).end();
        config.module
            .rule("icons")
            .test(/\.svg$/)
            .include.add(resolve("src/icons"))
            .end()
            .use("svg-sprite-loader")
            .loader("svg-sprite-loader")
            .options({
                symbolId: "icon-[name]",
            })
            .end();
wanli's avatar
wanli committed
80

81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
        // set preserveWhitespace
        config.module
            .rule("vue")
            .use("vue-loader")
            .loader("vue-loader")
            .tap((options) => {
                options.compilerOptions.preserveWhitespace = true;
                return options;
            })
            .end();

        config.when(process.env.NODE_ENV !== "development", (config) => {
            config
                .plugin("ScriptExtHtmlWebpackPlugin")
                .after("html")
                .use("script-ext-html-webpack-plugin", [
                    {
                        // `runtime` must same as runtimeChunk name. default is `runtime`
                        inline: /runtime\..*\.js$/,
                    },
                ])
                .end();
            config.optimization.splitChunks({
                chunks: "all",
                cacheGroups: {
                    libs: {
                        name: "chunk-libs",
                        test: /[\\/]node_modules[\\/]/,
                        priority: 10,
                        chunks: "initial", // only package third parties that are initially dependent
                    },
                    elementUI: {
                        name: "chunk-elementUI", // split elementUI into a single package
                        priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
                        test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
                    },
                    commons: {
                        name: "chunk-commons",
                        test: resolve("src/components"), // can customize your rules
                        minChunks: 3, //  minimum common number
                        priority: 5,
                        reuseExistingChunk: true,
                    },
                },
            });
            config.optimization.runtimeChunk("single");
        });
    },
wanli's avatar
wanli committed
129
};