ann0707
2018-08-16 c9bc8ec61cff4076132f6396d99d383a2cdf5a03
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
'use strict';
 
const path = require('path');
const utils = require('./utils');
const config = require('../config');
const vuxLoader = require('vux-loader');
const vueLoaderConfig = require('./vue-loader.conf');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
 
function resolve(dir) {
    return path.join(__dirname, '..', dir);
}
 
const webpackConfig = {
    entry: {
        app: './src/main.js'
    },
    output: {
        path: config.build.assetsRoot,
        libraryTarget: 'umd',
        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'),
        }
    },
    devServer: {},
    module: {
        rules: [
            // {
            //   test: /\.(js|vue)$/,
            //   loader: 'eslint-loader',
            //   enforce: 'pre',
            //   include: [resolve('src'), resolve('test')],
            //   options: {
            //     formatter: require('eslint-friendly-formatter')
            //   }
            // },
            {
                test: /\.vue$/,
                loader: 'vue-loader',
                options: vueLoaderConfig
            },
            {
                test: /\.js$/,
                loader: 'babel-loader',
                include: [resolve('src'), resolve('test')]
            },
            {
                test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    name: utils.assetsPath('img/[name].[hash:5].[ext]')
                }
            },
            {
                test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    name: utils.assetsPath('media/[name].[hash:5].[ext]')
                }
            },
            {
                test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    name: utils.assetsPath('fonts/[name].[hash:5].[ext]')
                }
            },
            {
                test: /\.(eot|svg|ttf|woff|woff2)$/,
                loader: 'file-loader'
            },
            {
                test: /\.css$/,
                loader: 'style-loader!css-loader!postcss-loader'
            },
            {
                test: /vux.src.*?js$/,
                loader: 'babel'
            }
        ]
    },
    externals: {
        'vue': 'Vue',  // key 代表包名, val 代表 引用的全局对象
        'vuex': 'Vuex',
        'vue-router': 'VueRouter',
        'fastclick': 'FastClick',
        'echarts': "echarts"
    }
};
 
 
// vux-loader的相关配置,详情可见其官网
module.exports = vuxLoader.merge(webpackConfig, {
        plugins: [
            'vux-ui',
            {
                name: 'duplicate-style',
                envs: ['production']
            },
            {
                name: 'less-theme',
                path: 'src/style/theme.less' // 主题的切换
            },
            {
                name: 'style-parser',
                fn: function (source) {
                    if (this.resourcePath.replace(/\\/g, '/').indexOf('/vux/src/components') > -1) {
                        return source;
                    }
                    // 对于自己项目的转换
                    return "@import '" + resolve('src/style/variable.less') + "';" + source;
                }
            }
        ]
    }
);