ducky/web

Paddy 2015-06-30 Parent:b9d0efb44eaa Child:5d47855181e1

13:d51e39bf909c Go to Latest

ducky/web/webpack.config.js

Update our profiles collection to use ampersand-rest-collection. Use ampersand-rest-collection instead of ampersand-collection, so we can take advantage of the excellent "getOrFetch" function to fall back on the server when looking for a member of the collection that isn't downloaded yet. Also, use the correct Authorization header when making profile collection requests. Finally, if the profile collection requests fail due to an expired access token, use the refresh token to acquire a new access token, then retry the request.

History
paddy@0 1 require('babel/register')
paddy@0 2 var webpack = require('webpack')
paddy@0 3 var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js')
paddy@0 4 var ExtractTextPlugin = require('extract-text-webpack-plugin')
paddy@0 5 var path = require('path')
paddy@0 6 var neat = require('node-neat').includePaths
paddy@0 7 var env = process.env.NODE_ENV || 'development'
paddy@0 8
paddy@0 9 module.exports = function () {
paddy@0 10 var isDev = env !== 'production'
paddy@0 11 var cssLoader = isDev ? 'css-loader?sourceMap' : 'css-loader'
paddy@0 12 var sassLoader = isDev ? 'sass-loader?sourceMap' : 'sass-loader'
paddy@0 13 var bourbonPaths = neat.map(function(p) {
paddy@0 14 return "includePaths[]=" + p
paddy@0 15 }).join("&")
paddy@0 16 if (sassLoader.indexOf('?') === -1) {
paddy@0 17 sassLoader += '?'
paddy@0 18 } else {
paddy@0 19 sassLoader += '&'
paddy@0 20 }
paddy@0 21 sassLoader += bourbonPaths
paddy@0 22 var manifest = {
paddy@0 23 entry: path.join(__dirname, 'src', 'main.js'),
paddy@0 24 output: {
paddy@2 25 path: path.join(__dirname, 'build', 'static'),
paddy@0 26 publicPath: '/static/',
paddy@0 27 filename: 'bundle.js'
paddy@0 28 },
paddy@0 29 module: {
paddy@0 30 loaders: [
paddy@0 31 { test: /(\.js$)|(\.jsx$)/, loader: 'babel-loader', exclude: /node_modules/ },
paddy@0 32 { test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', cssLoader) },
paddy@0 33 { test: /\.scss$/, loader: ExtractTextPlugin.extract('style-loader', cssLoader + '!' + sassLoader) },
paddy@0 34 { test: /\.(svg|png|jpg|jpeg)$/, loader: 'url-loader?limit=8192'}
paddy@0 35 ]
paddy@0 36 },
paddy@0 37 resolve: {
paddy@0 38 extensions: ['', '.js', '.jsx', '.scss']
paddy@0 39 },
paddy@0 40 plugins: [commonsPlugin, new ExtractTextPlugin("main.css")],
paddy@0 41 modulesDirectoires: ["node_modules"],
paddy@0 42 }
paddy@0 43 if (isDev) {
paddy@0 44 manifest.host = '0.0.0.0'
paddy@0 45 manifest.port = '3000'
paddy@0 46 manifest.devtool = 'source-map'
paddy@0 47
paddy@0 48 if (typeof manifest.entry === 'string') {
paddy@0 49 manifest.entry = [manifest.entry]
paddy@0 50 }
paddy@0 51
paddy@0 52 manifest.entry.unshift(
paddy@0 53 'webpack-dev-server/client?http://' + manifest.host + ':' + manifest.port,
paddy@0 54 'webpack/hot/dev-server'
paddy@0 55 )
paddy@0 56
paddy@0 57 manifest.plugins = manifest.plugins.concat([
paddy@0 58 new webpack.HotModuleReplacementPlugin(),
paddy@0 59 new webpack.NoErrorsPlugin()
paddy@0 60 ])
paddy@0 61
paddy@0 62 if (manifest.module.loaders[0].loader && !manifest.module.loaders[0].loaders) {
paddy@0 63 manifest.module.loaders[0].loaders = [manifest.module.loaders[0].loader]
paddy@0 64 delete manifest.module.loaders[0].loader
paddy@0 65 }
paddy@0 66
paddy@0 67 manifest.module.loaders[0].loaders.unshift('react-hot')
paddy@0 68 } else {
paddy@0 69 manifest.plugins.push(
paddy@0 70 new webpack.optimize.DedupePlugin(),
paddy@0 71 new webpack.optimize.OccurenceOrderPlugin(true),
paddy@0 72 new webpack.optimize.UglifyJsPlugin({
paddy@0 73 compress: {
paddy@0 74 warnings: false
paddy@0 75 },
paddy@0 76 output: {
paddy@0 77 comments: false
paddy@0 78 },
paddy@0 79 sourceMap: false
paddy@0 80 }),
paddy@0 81 new webpack.DefinePlugin({
paddy@0 82 'process.env': {NODE_ENV: JSON.stringify('production')}
paddy@0 83 })
paddy@0 84 )
paddy@0 85 }
paddy@0 86 return manifest
paddy@0 87 }()