116 lines
2.9 KiB
JavaScript
116 lines
2.9 KiB
JavaScript
const path = require('path')
|
||
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||
const { VueLoaderPlugin } = require('vue-loader')
|
||
|
||
module.exports = (env, argv) => {
|
||
const isDevelopment = argv.mode === 'development'
|
||
|
||
return {
|
||
entry: './src/main.js',
|
||
output: {
|
||
path: path.resolve(__dirname, 'dist'),
|
||
filename: isDevelopment ? 'bundle.js' : 'bundle.[contenthash:8].js',
|
||
clean: true
|
||
},
|
||
// 开发模式使用高质量的 source map,方便调试
|
||
devtool: isDevelopment ? 'eval-source-map' : 'source-map',
|
||
module: {
|
||
rules: [
|
||
{
|
||
test: /\.vue$/,
|
||
loader: 'vue-loader'
|
||
},
|
||
{
|
||
test: /\.js$/,
|
||
loader: 'babel-loader',
|
||
exclude: /node_modules/
|
||
},
|
||
{
|
||
test: /\.css$/,
|
||
use: [
|
||
'vue-style-loader',
|
||
{
|
||
loader: 'css-loader',
|
||
options: {
|
||
sourceMap: isDevelopment
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
test: /\.less$/,
|
||
use: [
|
||
'vue-style-loader',
|
||
{
|
||
loader: 'css-loader',
|
||
options: {
|
||
sourceMap: isDevelopment
|
||
}
|
||
},
|
||
{
|
||
loader: 'less-loader',
|
||
options: {
|
||
sourceMap: isDevelopment
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
||
loader: 'url-loader',
|
||
options: {
|
||
limit: 10000,
|
||
name: 'images/[name].[hash:7].[ext]',
|
||
esModule: false
|
||
}
|
||
},
|
||
{
|
||
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
||
loader: 'url-loader',
|
||
options: {
|
||
limit: 10000,
|
||
name: 'fonts/[name].[hash:7].[ext]',
|
||
esModule: false
|
||
}
|
||
}
|
||
]
|
||
},
|
||
plugins: [
|
||
new VueLoaderPlugin(),
|
||
new HtmlWebpackPlugin({
|
||
template: './public/index.html',
|
||
filename: 'index.html'
|
||
})
|
||
],
|
||
resolve: {
|
||
extensions: ['.js', '.vue', '.json'],
|
||
alias: {
|
||
// 框架源码的别名(必须在前面,优先级高)
|
||
'@': path.resolve(__dirname, '../src'),
|
||
'@component': path.resolve(__dirname, '../src/components'),
|
||
'@utils': path.resolve(__dirname, '../src/utils'),
|
||
'@api': path.resolve(__dirname, '../src/api'),
|
||
'@config': path.resolve(__dirname, '../src/config'),
|
||
'@assets': path.resolve(__dirname, '../src/assets'),
|
||
// demo 项目的别名
|
||
'~': path.resolve(__dirname, 'src'),
|
||
'vue$': 'vue/dist/vue.esm.js'
|
||
}
|
||
},
|
||
devServer: {
|
||
port: 8080,
|
||
hot: true,
|
||
open: true,
|
||
historyApiFallback: true,
|
||
// 启用覆盖层显示编译错误
|
||
client: {
|
||
overlay: {
|
||
errors: true,
|
||
warnings: false
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|