var _ = require('lodash') var webpack = require('webpack') var CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin') var ProgressPlugin = require('webpack/lib/ProgressPlugin') var pathutil = require('./lib/util/pathutil') var log = require('./lib/util/logger').createLogger('webpack:config') module.exports = { webpack: { context: __dirname, cache: true, entry: { app: pathutil.resource('app/app.js'), authldap: pathutil.resource('auth/ldap/scripts/entry.js'), authmock: pathutil.resource('auth/mock/scripts/entry.js') }, output: { path: pathutil.resource('build'), publicPath: '/static/app/build/', filename: 'entry/[name].entry.js', chunkFilename: '[id].[hash].chunk.js' }, stats: { colors: true }, resolve: { root: [ pathutil.resource('app/components'), ], modulesDirectories: [ 'web_modules', 'bower_components', 'node_modules', ], alias: { 'angular-bootstrap': 'angular-bootstrap/ui-bootstrap-tpls', 'localforage': 'localforage/dist/localforage.js', 'socket.io': 'socket.io-client' } }, module: { loaders: [ { test: /\.css$/, loader: 'style!css' }, { test: /\.less$/, loader: 'style-loader!css-loader!less-loader'}, { test: /\.json$/, loader: 'json' }, { test: /\.jpg$/, loader: 'url-loader?limit=1000&mimetype=image/jpeg' }, { test: /\.png$/, loader: 'url-loader?limit=1000&mimetype=image/png' }, { test: /\.gif$/, loader: 'url-loader?limit=1000&mimetype=image/gif' }, { test: /\.svg/, loader: 'url-loader?limit=1&mimetype=image/svg+xml' }, { test: /\.woff/, loader: 'url-loader?limit=1&mimetype=application/font-woff' }, { test: /\.otf/, loader: 'url-loader?limit=1&mimetype=application/font-woff' }, { test: /\.ttf/, loader: 'url-loader?limit=1&mimetype=application/font-woff' }, { test: /\.eot/, loader: 'url-loader?limit=1&mimetype=vnd.ms-fontobject' }, { test: /\.jade$/, loader: 'template-html-loader' }, { test: /\.html$/, loader: 'html-loader' }, { test: /angular\.js$/, loader: 'exports?angular'}, { test: /angular-route\.js$/, loader: 'imports?angular=angular'}, { test: /angular-touch\.js$/, loader: 'imports?angular=angular'}, { test: /angular-animate\.js$/, loader: 'imports?angular=angular'}, { test: /angular-growl\.js$/, loader: 'imports?angular=angular'}, { test: /uuid\.js$/, loader: 'imports?require=>undefined'}, { test: /dialogs\.js$/, loader: 'script'} ], preLoaders: [ { test: /\.js$/, exclude: /node_modules|bower_components/, loader: 'jshint-loader' } ], noParse: [ //pathutil.resource('bower_components') ] }, plugins: [ new webpack.ResolverPlugin( new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin( 'bower.json' , ['main'] ) ) , new webpack.ResolverPlugin( new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin( '.bower.json' , ['main'] ) ) , new CommonsChunkPlugin('entry/commons.entry.js') , new ProgressPlugin(_.throttle( function(progress, message) { log.info( 'Build progress %d%% (%s)' , Math.floor(progress * 100) , message ? message : (progress >= 1 ? 'complete' : 'unknown') ) } , 1000 )) ] }, webpackServer: { debug: true, devtool: 'eval', stats: { colors: true } } }