123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- const path = require('path')
- var webpack = require('webpack')
- var HtmlWebpackPlugin = require('html-webpack-plugin')
- var VueLoaderPlugin = require('vue-loader/lib/plugin')
- var url = require('url')
- var publicPath = ''
- module.exports = (options = {}) => ({
- entry: {
- vendor: './src/main'
- },
- output: {
- path: path.resolve(__dirname, 'dist'),
- filename: options.dev ? '[name].js' : '[name].js?[chunkhash]',
- chunkFilename: '[id].js?[chunkhash]',
- publicPath: options.dev ? '/assets/' : publicPath
- },
- resolve: {
- extensions: ['.js', '.vue', '.json'],
- alias: {
- 'vue$': 'vue/dist/vue.esm.js',
- '@': path.resolve(__dirname, 'src'),
- }
- },
- module: {
- rules: [{
- test: /\.vue$/,
- loader: 'vue-loader'
- }, {
- test: /\.js$/,
- use: ['babel-loader'],
- exclude: /node_modules/
- }, {
- test: /\.html$/,
- use: [{
- loader: 'html-loader',
- options: {
- root: path.resolve(__dirname, 'src'),
- attrs: ['img:src', 'link:href']
- }
- }]
- }, {
- test: /\.less$/,
- loader: 'style-loader!css-loader!postcss-loader!less-loader'
- }, {
- test: /\.css$/,
- use: ['style-loader', 'css-loader', 'postcss-loader']
- }, {
- test: /favicon\.png$/,
- use: [{
- loader: 'file-loader',
- options: {
- name: '[name].[ext]?[hash]'
- }
- }]
- }, {
- test: /\.(png|jpg|jpeg|gif|eot|ttf|woff|woff2|svg|svgz)(\?.+)?$/,
- exclude: /favicon\.png$/,
- use: [{
- loader: 'url-loader',
- options: {
- limit: 10000
- }
- }]
- }]
- },
- plugins: [
- new webpack.optimize.CommonsChunkPlugin({
- names: ['vendor', 'manifest']
- }),
- new HtmlWebpackPlugin({
- favicon: 'src/assets/favicon.ico',
- template: 'src/index.html'
- }),
- new webpack.NormalModuleReplacementPlugin(/element-ui[\/\\]lib[\/\\]locale[\/\\]lang[\/\\]zh-CN/, 'element-ui/lib/locale/lang/en'),
- new webpack.DefinePlugin({
- 'process.env': {
- NODE_ENV: '"production"'
- }
- }),
- new webpack.optimize.UglifyJsPlugin({
- sourceMap: false,
- comments: false,
- compress: {
- warnings: false
- }
- }),
- new VueLoaderPlugin()
- ],
- devServer: {
- host: '127.0.0.1',
- port: 8010,
- proxy: {
- '/api/': {
- target: 'http://127.0.0.1:8080',
- changeOrigin: true,
- pathRewrite: {
- '^/api': ''
- }
- }
- },
- historyApiFallback: {
- index: url.parse(options.dev ? '/assets/' : publicPath).pathname
- }
- }//,
- //devtool: options.dev ? '#eval-source-map' : '#source-map'
- })
|