Created
September 18, 2017 04:53
-
-
Save brandoncordell/960f13dc0e1cc0e86f488c3d1b61f16f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// http://eslint.org/docs/user-guide/configuring | |
module.exports = { | |
root: true, | |
parser: 'babel-eslint', | |
parserOptions: { | |
sourceType: 'module' | |
}, | |
env: { | |
browser: true, | |
jquery: true | |
}, | |
extends: 'airbnb-base', | |
// required to lint *.vue files | |
globals: { | |
$: 'jquery', | |
jquery: 'jquery', | |
jQuery: 'jquery', | |
'window.jQuery': 'jquery', | |
Popper: ['popper.js', 'default'], | |
}, | |
plugins: [ | |
'html' | |
], | |
// check if imports actually resolve | |
'settings': { | |
'import/resolver': { | |
'webpack': { | |
'config': 'build/webpack.base.conf.js' | |
} | |
} | |
}, | |
// add your custom rules here | |
'rules': { | |
'no-undef': 0, | |
'no-unused-vars': 'off', | |
// don't require .vue extension when importing | |
'import/extensions': ['error', 'always', { | |
'js': 'never', | |
'vue': 'never' | |
}], | |
// allow optionalDependencies | |
'import/no-extraneous-dependencies': ['error', { | |
'optionalDependencies': ['test/unit/index.js'] | |
}], | |
// allow debugger during development | |
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// The Vue build version to load with the `import` command | |
// (runtime-only or standalone) has been set in webpack.base.conf with an alias. | |
import Vue from 'vue'; | |
import VeeValidate from 'vee-validate'; | |
import App from './App'; | |
import router from './router'; | |
require('../node_modules/bootstrap/dist/css/bootstrap.min.css'); | |
require('./assets/stylesheets/font-awesome.min.css'); | |
require('./assets/stylesheets/weather-icons.min.css'); | |
Vue.config.productionTip = false; | |
Vue.use(VeeValidate); | |
/* eslint-disable no-new */ | |
new Vue({ | |
el: '#app', | |
router, | |
template: '<App/>', | |
components: { App }, | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var webpack = require('webpack') | |
var path = require('path') | |
var utils = require('./utils') | |
var config = require('../config') | |
var vueLoaderConfig = require('./vue-loader.conf') | |
function resolve (dir) { | |
return path.join(__dirname, '..', dir) | |
} | |
module.exports = { | |
entry: [ | |
'jquery', | |
'./src/main.js' | |
], | |
output: { | |
path: config.build.assetsRoot, | |
filename: '[name].js', | |
publicPath: process.env.NODE_ENV === 'production' | |
? config.build.assetsPublicPath | |
: config.dev.assetsPublicPath | |
}, | |
resolve: { | |
extensions: ['.js', '.vue', '.json'], | |
alias: { | |
'vue$': 'vue/dist/vue.esm.js', | |
'@': resolve('src'), | |
} | |
}, | |
module: { | |
rules: [ | |
{ | |
test: /\.(js|vue)$/, | |
loader: 'eslint-loader', | |
enforce: 'pre', | |
include: [resolve('src'), resolve('test')], | |
options: { | |
formatter: require('eslint-friendly-formatter') | |
} | |
}, | |
{ | |
test: /\.vue$/, | |
loader: 'vue-loader', | |
options: vueLoaderConfig | |
}, | |
{ | |
test: /[\/]jquery\.js$/, | |
use: 'expose-loader?$!expose?jQuery' | |
}, | |
{ | |
test: /\.js$/, | |
loader: 'babel-loader', | |
include: [resolve('src'), resolve('test')] | |
}, | |
{ | |
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, | |
loader: 'url-loader', | |
options: { | |
limit: 10000, | |
name: utils.assetsPath('img/[name].[hash:7].[ext]') | |
} | |
}, | |
{ | |
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, | |
loader: 'url-loader', | |
options: { | |
limit: 10000, | |
name: utils.assetsPath('media/[name].[hash:7].[ext]') | |
} | |
}, | |
{ | |
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, | |
loader: 'url-loader', | |
options: { | |
limit: 10000, | |
name: utils.assetsPath('fonts/[name].[hash:7].[ext]') | |
} | |
}, | |
//{ | |
//test: /\.(scss)$/, | |
//use: [{ | |
//loader: 'style-loader' | |
//}, { | |
//loader: 'css-loader' | |
//}, { | |
//loader: 'postcss-loader', | |
//options: { | |
//plugins: function () { | |
//return [ | |
//require('precss'), | |
//require('autoprefixer') | |
//]; | |
//} | |
//} | |
//}, { | |
//loader: 'sass-loader' | |
//}] | |
//} | |
] | |
}, | |
plugins: [ | |
new webpack.ProvidePlugin({ | |
$: 'jquery', | |
jQuery: 'jquery', | |
'window.jQuery': 'jquery', | |
Popper: ['popper.js', 'default'], | |
}) | |
] | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var path = require('path') | |
var utils = require('./utils') | |
var webpack = require('webpack') | |
var config = require('../config') | |
var merge = require('webpack-merge') | |
var baseWebpackConfig = require('./webpack.base.conf') | |
var CopyWebpackPlugin = require('copy-webpack-plugin') | |
var HtmlWebpackPlugin = require('html-webpack-plugin') | |
var ExtractTextPlugin = require('extract-text-webpack-plugin') | |
var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') | |
var env = config.build.env | |
var webpackConfig = merge(baseWebpackConfig, { | |
module: { | |
rules: utils.styleLoaders({ | |
sourceMap: config.build.productionSourceMap, | |
extract: true | |
}) | |
}, | |
devtool: config.build.productionSourceMap ? '#source-map' : false, | |
output: { | |
path: config.build.assetsRoot, | |
filename: utils.assetsPath('js/[name].[chunkhash].js'), | |
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') | |
}, | |
plugins: [ | |
// http://vuejs.github.io/vue-loader/en/workflow/production.html | |
new webpack.DefinePlugin({ | |
'process.env': env | |
}), | |
new webpack.optimize.UglifyJsPlugin({ | |
compress: { | |
warnings: false | |
}, | |
sourceMap: true | |
}), | |
// extract css into its own file | |
new ExtractTextPlugin({ | |
filename: utils.assetsPath('css/[name].[contenthash].css') | |
}), | |
// Compress extracted CSS. We are using this plugin so that possible | |
// duplicated CSS from different components can be deduped. | |
new OptimizeCSSPlugin({ | |
cssProcessorOptions: { | |
safe: true | |
} | |
}), | |
// generate dist index.html with correct asset hash for caching. | |
// you can customize output by editing /index.html | |
// see https://github.com/ampedandwired/html-webpack-plugin | |
new HtmlWebpackPlugin({ | |
filename: config.build.index, | |
template: 'index.html', | |
inject: true, | |
minify: { | |
removeComments: true, | |
collapseWhitespace: true, | |
removeAttributeQuotes: true | |
// more options: | |
// https://github.com/kangax/html-minifier#options-quick-reference | |
}, | |
// necessary to consistently work with multiple chunks via CommonsChunkPlugin | |
chunksSortMode: 'dependency' | |
}), | |
// keep module.id stable when vender modules does not change | |
new webpack.HashedModuleIdsPlugin(), | |
// split vendor js into its own file | |
new webpack.optimize.CommonsChunkPlugin({ | |
name: 'vendor', | |
minChunks: function (module, count) { | |
// any required modules inside node_modules are extracted to vendor | |
return ( | |
module.resource && | |
/\.js$/.test(module.resource) && | |
module.resource.indexOf( | |
path.join(__dirname, '../node_modules') | |
) === 0 | |
) | |
} | |
}), | |
// extract webpack runtime and module manifest to its own file in order to | |
// prevent vendor hash from being updated whenever app bundle is updated | |
new webpack.optimize.CommonsChunkPlugin({ | |
name: 'manifest', | |
chunks: ['vendor'] | |
}), | |
// copy custom static assets | |
new CopyWebpackPlugin([ | |
{ | |
from: path.resolve(__dirname, '../static'), | |
to: config.build.assetsSubDirectory, | |
ignore: ['.*'] | |
} | |
]), | |
new webpack.ProvidePlugin({ | |
$: 'jquery', | |
jquery: 'jquery', | |
jQuery: 'jquery', | |
'window.jQuery': 'jquery', | |
'window.$': 'jquery', | |
Popper: ['popper.js', 'default'], | |
}), | |
] | |
}) | |
if (config.build.productionGzip) { | |
var CompressionWebpackPlugin = require('compression-webpack-plugin') | |
webpackConfig.plugins.push( | |
new CompressionWebpackPlugin({ | |
asset: '[path].gz[query]', | |
algorithm: 'gzip', | |
test: new RegExp( | |
'\\.(' + | |
config.build.productionGzipExtensions.join('|') + | |
')$' | |
), | |
threshold: 10240, | |
minRatio: 0.8 | |
}) | |
) | |
} | |
if (config.build.bundleAnalyzerReport) { | |
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin | |
webpackConfig.plugins.push(new BundleAnalyzerPlugin()) | |
} | |
module.exports = webpackConfig |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment