'use strict'; const path = require('path'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const ExtractTextPlugin = require("extract-text-webpack-plugin"); const ENV = process.env.npm_lifecycle_event; console.log(); const isTestBuild = ENV === 'test'; const isDevBuild = ENV === 'dev-build'; const isProdBuild = ENV === 'build'; const config = { module: { preLoaders: [], loaders: [{ test: /\.js$/, loader: 'babel', exclude: /node_modules/ }] } }; if (isTestBuild) { config.devtool = 'inline-source-map'; config.entry = {}; config.output = {}; // code coverage config config.module.preLoaders.push({ test: /\.js$/, exclude: [ /node_modules/, /\.spec\.js$/ ], loader: 'isparta' }); } if (isDevBuild || isProdBuild) { config.devtool = isDevBuild ? 'eval-source-map' : 'source-map'; config.entry = ['./src/app.js']; config.output = { path: path.join(__dirname, '/dist'), filename: 'bundle.js' }; config.plugins = [ new CopyWebpackPlugin([ { from: 'src/index.html' }, { from: 'src/images' } ]), new ExtractTextPlugin("styles.css") ]; config.eslint = { configFile: './.eslintrc' }; config.module.loaders = [ { test: /\.js$/, loader: 'babel?presets[]=es2015', exclude: /node_modules/ }, { test: /\.html$/, loader: path.join('angular-template?relativeTo=', path.resolve(__dirname, './src'), '/!html') }, { test: /\.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader") }, { test: /\.png$/, loader: 'url-loader?limit=100000' }, { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: 'url-loader?limit=10000&mimetype=application/font-woff' }, { test: /\.(ttf|otf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?|(jpg|gif)$/, loader: 'file-loader' } ]; } if (isDevBuild) { console.log('**********************************************************************'); console.log('* DEVELOPMENT BUILD *'); console.log('**********************************************************************'); } if (isTestBuild) { console.log('**********************************************************************'); console.log('* TEST BUILD *'); console.log('**********************************************************************'); } if (isProdBuild) { console.log('**********************************************************************'); console.log('* PRODUCTION BUILD *'); console.log('**********************************************************************'); // only do linting for production // builds so we can do log debugging and other stuff config.module.preLoaders.push({ test: /\.js$/, loader: 'eslint-loader', include: path.join(__dirname, '/src'), exclude: /node_modules/ }); } module.exports = config;