// // Copyright © 2022 contains code contributed by Orange SA, authors: Denis Barbaron - Licensed under the Apache license 2.0 // var _ = require('lodash') var webpack = require('webpack') 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: { modules: [ pathutil.resource('app/components') , 'web_modules' , 'bower_components' , 'node_modules' ] , descriptionFiles: ['package.json', 'bower.json'] , moduleExtensions: ['-loader'] , extensions: ['.js', '.json'] , enforceModuleExtension: false , alias: { 'angular-bootstrap': 'angular-bootstrap/ui-bootstrap-tpls' , localforage: 'localforage/dist/localforage.js' , 'socket.io': 'socket.io-client' , stats: 'stats.js/src/Stats.js' , 'underscore.string': 'underscore.string/index' } } , module: { loaders: [ {test: /\.css$/, loader: 'style-loader!css-loader'} , {test: /\.scss$/, loader: 'style-loader!css-loader!sass-loader'} , {test: /\.less$/, loader: 'style-loader!css-loader!less-loader'} , {test: /\.json$/, loader: 'json-loader'} , {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: /\.pug$/, loader: 'template-html-loader?engine=jade'} , {test: /\.html$/, loader: 'html-loader'} , {test: /angular\.js$/, loader: 'exports-loader?angular'} , {test: /angular-cookies\.js$/, loader: 'imports-loader?angular=angular'} , {test: /angular-route\.js$/, loader: 'imports-loader?angular=angular'} , {test: /angular-touch\.js$/, loader: 'imports-loader?angular=angular'} , {test: /angular-animate\.js$/, loader: 'imports-loader?angular=angular'} , {test: /angular-growl\.js$/, loader: 'imports-loader?angular=angular'} , {test: /dialogs\.js$/, loader: 'script-loader'} ] } , plugins: [ new webpack.optimize.CommonsChunkPlugin({ name: 'commons.entry' , filename: 'entry/commons.entry.js' }) , new ProgressPlugin(_.throttle( function(progress, message) { var msg if (message) { msg = message } else { msg = progress >= 1 ? 'complete' : 'unknown' } log.info('Build progress %d%% (%s)', Math.floor(progress * 100), msg) } , 1000 )) ] } , webpackServer: { plugins: [ new webpack.LoaderOptionsPlugin({ debug: true }) , new webpack.optimize.CommonsChunkPlugin({ name: 'commons.entry' , filename: 'entry/commons.entry.js' }) ] , devtool: 'eval' , stats: { colors: true } } }