115 lines
2.7 KiB
JavaScript
115 lines
2.7 KiB
JavaScript
var
|
|
path = require('path'),
|
|
webpack = require('webpack'),
|
|
config = require('../config'),
|
|
cssUtils = require('./css-utils'),
|
|
env = require('./env-utils'),
|
|
merge = require('webpack-merge'),
|
|
projectRoot = path.resolve(__dirname, '../'),
|
|
ProgressBarPlugin = require('progress-bar-webpack-plugin'),
|
|
useCssSourceMap =
|
|
(env.dev && config.dev.cssSourceMap) ||
|
|
(env.prod && config.build.productionSourceMap)
|
|
|
|
function resolve (dir) {
|
|
return path.join(__dirname, '..', dir)
|
|
}
|
|
|
|
module.exports = {
|
|
entry: {
|
|
app: './src/main.js'
|
|
},
|
|
output: {
|
|
path: path.resolve(__dirname, '../dist'),
|
|
publicPath: config[env.prod ? 'build' : 'dev'].publicPath,
|
|
filename: 'js/[name].js',
|
|
chunkFilename: 'js/[id].[chunkhash].js'
|
|
},
|
|
resolve: {
|
|
extensions: ['.js', '.vue', '.json'],
|
|
modules: [
|
|
resolve('src'),
|
|
resolve('node_modules')
|
|
],
|
|
alias: config.aliases
|
|
},
|
|
module: {
|
|
rules: [
|
|
{ // eslint
|
|
enforce: 'pre',
|
|
test: /\.(vue|js)$/,
|
|
loader: 'eslint-loader',
|
|
include: projectRoot,
|
|
exclude: /node_modules/,
|
|
options: {
|
|
formatter: require('eslint-friendly-formatter')
|
|
}
|
|
},
|
|
{
|
|
test: /\.js$/,
|
|
loader: 'babel-loader',
|
|
include: projectRoot,
|
|
exclude: /node_modules/
|
|
},
|
|
{
|
|
test: /\.vue$/,
|
|
loader: 'vue-loader',
|
|
options: {
|
|
postcss: cssUtils.postcss,
|
|
loaders: merge({js: 'babel-loader'}, cssUtils.styleLoaders({
|
|
sourceMap: useCssSourceMap,
|
|
extract: env.prod
|
|
}))
|
|
}
|
|
},
|
|
{
|
|
test: /\.json$/,
|
|
loader: 'json-loader'
|
|
},
|
|
{
|
|
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
|
loader: 'url-loader',
|
|
options: {
|
|
limit: 10000,
|
|
name: 'img/[name].[hash:7].[ext]'
|
|
}
|
|
},
|
|
{
|
|
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
|
loader: 'url-loader',
|
|
options: {
|
|
limit: 10000,
|
|
name: 'fonts/[name].[hash:7].[ext]'
|
|
}
|
|
}
|
|
]
|
|
},
|
|
plugins: [
|
|
/*
|
|
Take note!
|
|
Uncomment if you wish to load only one Moment locale:
|
|
|
|
new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /en/),
|
|
*/
|
|
|
|
new webpack.DefinePlugin({
|
|
'process.env': config[env.prod ? 'build' : 'dev'].env,
|
|
'DEV': env.dev,
|
|
'PROD': env.prod,
|
|
'__THEME': '"' + env.platform.theme + '"'
|
|
}),
|
|
new webpack.LoaderOptionsPlugin({
|
|
minimize: env.prod,
|
|
options: {
|
|
context: path.resolve(__dirname, '../src'),
|
|
postcss: cssUtils.postcss
|
|
}
|
|
}),
|
|
new ProgressBarPlugin({
|
|
format: config.progressFormat
|
|
})
|
|
],
|
|
performance: {
|
|
hints: false
|
|
}
|
|
}
|