1 | const path = require('path');
|
2 | const cwd = process.cwd();
|
3 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
4 |
|
5 | const resolve = (dir) => {
|
6 | return path.posix.join(cwd, dir)
|
7 | }
|
8 |
|
9 | const getAssetsPath = (_path, config) => {
|
10 | var assetsSubDirectory = config.assetsSubDirectory
|
11 | return path.posix.join(cwd, assetsSubDirectory, _path)
|
12 | }
|
13 |
|
14 | const getCssLoaders = (env, inVue) => {
|
15 | let styleLoader = inVue ? 'vue-style-loader' : 'style-loader'
|
16 |
|
17 | if (env === 'production') {
|
18 | return ExtractTextPlugin.extract({
|
19 | fallback: styleLoader,
|
20 | use: ['css-loader', 'sass-loader']
|
21 | })
|
22 | } else {
|
23 | let loaders = [styleLoader, 'css-loader', 'sass-loader']
|
24 | if (inVue) {
|
25 | return loaders.join('!')
|
26 | } else {
|
27 | return loaders
|
28 | }
|
29 | }
|
30 | }
|
31 |
|
32 | module.exports = function (config) {
|
33 | const env = JSON.parse(config.env.NODE_ENV)
|
34 |
|
35 | return {
|
36 | entry: {
|
37 | app: resolve('src/main.js'),
|
38 | },
|
39 | output: {
|
40 | path: resolve('dist'),
|
41 | filename: '[name].js',
|
42 | publicPath: config.assetsPublicPath
|
43 | },
|
44 | resolve: {
|
45 | extensions: ['.js', '.vue', '.json'],
|
46 | alias: {
|
47 | 'vue$': 'vue/dist/vue.common.js',
|
48 | '@': resolve('src'),
|
49 | 'http$': resolve('lib/services.js'),
|
50 | 'core$': resolve('core/index.js'),
|
51 | 'config$': resolve('config.js'),
|
52 | 'views': resolve('src/views'),
|
53 | 'portal': resolve('src/views/portal'),
|
54 | 'service': resolve('src/service')
|
55 | }
|
56 | },
|
57 | module: {
|
58 | rules: [{
|
59 | test: /\.(vue)$/,
|
60 | enforce: 'pre',
|
61 | loader: 'eslint-loader',
|
62 | include: [resolve('src')],
|
63 | options: {
|
64 | formatter: require("eslint-friendly-formatter")
|
65 | }
|
66 | },
|
67 | {
|
68 | test: /\.vue$/,
|
69 | loader: 'vue-loader',
|
70 | options: {
|
71 | loaders: {
|
72 | scss: getCssLoaders(env, true)
|
73 | }
|
74 | }
|
75 | },
|
76 | {
|
77 | test: /\.(css|scss)$/,
|
78 | use: getCssLoaders(env)
|
79 | },
|
80 | {
|
81 | test: /\.js(x)*$/,
|
82 | loader: 'babel-loader',
|
83 | exclude: /node_modules/
|
84 | },
|
85 | {
|
86 | test: /\.html$/,
|
87 | loader: 'vue-html-loader'
|
88 | },
|
89 | {
|
90 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
91 | loader: 'url-loader',
|
92 | query: {
|
93 | limit: 10000,
|
94 | name: getAssetsPath('img/[name].[hash:7].[ext]', config)
|
95 | }
|
96 | },
|
97 | {
|
98 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
99 | loader: 'url-loader',
|
100 | query: {
|
101 | limit: 10000,
|
102 | name: getAssetsPath('fonts/[name].[hash:7].[ext]', config)
|
103 | }
|
104 | }
|
105 | ]
|
106 | }
|
107 | }
|
108 | } |
\ | No newline at end of file |