141 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict'
 | |
| 
 | |
| process.env.BABEL_ENV = 'web'
 | |
| 
 | |
| const path = require('path')
 | |
| const webpack = require('webpack')
 | |
| 
 | |
| const BabiliWebpackPlugin = require('babili-webpack-plugin')
 | |
| const CopyWebpackPlugin = require('copy-webpack-plugin')
 | |
| const ExtractTextPlugin = require('extract-text-webpack-plugin')
 | |
| const HtmlWebpackPlugin = require('html-webpack-plugin')
 | |
| 
 | |
| let webConfig = {
 | |
|   devtool: '#cheap-module-eval-source-map',
 | |
| 
 | |
|   entry: {
 | |
|     web: path.join(__dirname, '../src/renderer/main.js')
 | |
|   },
 | |
|   module: {
 | |
|     rules: [
 | |
|       /* {
 | |
|          test: /\.(js|vue)$/,
 | |
|          enforce: 'pre',
 | |
|          exclude: /node_modules/,
 | |
|          use: {
 | |
|            loader: 'eslint-loader',
 | |
|            options: {
 | |
|              formatter: require('eslint-friendly-formatter')
 | |
|            }
 | |
|          }
 | |
|        },*/
 | |
|       {
 | |
|         test: /\.css$/,
 | |
|         use: ExtractTextPlugin.extract({
 | |
|           fallback: 'style-loader',
 | |
|           use: 'css-loader'
 | |
|         })
 | |
|       },
 | |
|       {
 | |
|         test: /\.html$/,
 | |
|         use: 'vue-html-loader'
 | |
|       },
 | |
|       {
 | |
|         test: /\.js$/,
 | |
|         use: 'babel-loader',
 | |
|         include: [path.resolve(__dirname, '../src/renderer')],
 | |
|         exclude: /node_modules/
 | |
|       },
 | |
|       {
 | |
|         test: /\.vue$/,
 | |
|         use: {
 | |
|           loader: 'vue-loader',
 | |
|           options: {
 | |
|             extractCSS: true,
 | |
|             loaders: {
 | |
|               sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1',
 | |
|               scss: 'vue-style-loader!css-loader!sass-loader'
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       },
 | |
|       {
 | |
|         test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
 | |
|         use: {
 | |
|           loader: 'url-loader',
 | |
|           query: {
 | |
|             limit: 10000,
 | |
|             name: 'imgs/[name].[ext]'
 | |
|           }
 | |
|         }
 | |
|       },
 | |
|       {
 | |
|         test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
 | |
|         use: {
 | |
|           loader: 'url-loader',
 | |
|           query: {
 | |
|             limit: 10000,
 | |
|             name: 'fonts/[name].[ext]'
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     ]
 | |
|   },
 | |
|   plugins: [
 | |
|     new ExtractTextPlugin('styles.css'),
 | |
|     new HtmlWebpackPlugin({
 | |
|       filename: 'index.html',
 | |
|       template: path.resolve(__dirname, '../src/index.ejs'),
 | |
|       minify: {
 | |
|         collapseWhitespace: true,
 | |
|         removeAttributeQuotes: true,
 | |
|         removeComments: true
 | |
|       },
 | |
|       nodeModules: false,
 | |
|     }),
 | |
|     new webpack.DefinePlugin({
 | |
|       'process.env.IS_WEB': 'true'
 | |
|     }),
 | |
|     new webpack.HotModuleReplacementPlugin(),
 | |
|     new webpack.NoEmitOnErrorsPlugin()
 | |
|   ],
 | |
|   output: {
 | |
|     filename: '[name].js',
 | |
|     path: path.join(__dirname, '../dist/web')
 | |
|   },
 | |
|   resolve: {
 | |
|     alias: {
 | |
|       '@': path.join(__dirname, '../src/renderer'),
 | |
|       'vue$': 'vue/dist/vue.esm.js'
 | |
|     },
 | |
|     extensions: ['.js', '.vue', '.json', '.css']
 | |
|   },
 | |
|   target: 'web'
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Adjust webConfig for production settings
 | |
|  */
 | |
| if (process.env.NODE_ENV === 'production') {
 | |
|   webConfig.devtool = ''
 | |
| 
 | |
|   webConfig.plugins.push(
 | |
|       new BabiliWebpackPlugin(),
 | |
|       new CopyWebpackPlugin([
 | |
|         {
 | |
|           from: path.join(__dirname, '../static'),
 | |
|           to: path.join(__dirname, '../dist/web/static'),
 | |
|           ignore: ['.*']
 | |
|         }
 | |
|       ]),
 | |
|       new webpack.DefinePlugin({
 | |
|         'process.env.NODE_ENV': '"production"'
 | |
|       }),
 | |
|       new webpack.LoaderOptionsPlugin({
 | |
|         minimize: true
 | |
|       })
 | |
|   )
 | |
| }
 | |
| 
 | |
| module.exports = webConfig
 |