mirror of https://github.com/fatedier/frp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.1 KiB
107 lines
3.1 KiB
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' |
|
})
|
|
|