const Path = require('path'); const Webpack = require('webpack'); const WebpackMerge = require('webpack-merge'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const WebpackDashboardPlugin = require('webpack-dashboard/plugin'); const configBase = require('./webpack.config.base.js'); const packages = require('../../package.json'); module.exports = WebpackMerge(configBase, { entry: { webapp: [ 'react-hot-loader/patch', Path.resolve(__dirname, '../../src/ts/@overflow/webapp/index.tsx') ], vendor: Object.keys(packages.dependencies) }, devtool: 'inline-source-map', devServer: { hot: true, inline: true, historyApiFallback: true, publicPath: '/', // match the output `publicPath` contentBase: [__dirname + '/public', __dirname + '/dist', __dirname + '/node_modules'], // match the output path host: '127.0.0.1', port: 9091, stats: { colors: true }, watchOptions: { ignored: /node_modules/, }, }, module: { loaders: [ // source-map { enforce: 'pre', test: /\.js$/, use: [ { loader: 'source-map-loader' } ], exclude: [ Path.resolve(__dirname, '../../node_modules/') ] }, { enforce: 'pre', test: /\.tsx?$/, use: [ { loader: 'source-map-loader' } ], exclude: [ Path.resolve(__dirname, '../../node_modules/') ] }, // .ts, .tsx { test: /\.tsx?$/, exclude: [ Path.resolve(__dirname, '../../node_modules/') ], include: [ Path.resolve(__dirname, '../../src/') ], use: [ { loader: 'react-hot-loader/webpack' }, { loader: 'awesome-typescript-loader', options: { transpileOnly: true, useTranspileModule: false, sourceMap: true, }, }, ] }, // static assets { test: /\.html$/, use: 'html-loader' }, { test: /\.png$/, use: 'url-loader?limit=10000' }, { test: /\.jpg$/, use: 'file-loader' }, ], }, plugins: [ new WebpackDashboardPlugin(), new Webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('development') }), new Webpack.optimize.CommonsChunkPlugin({ name: 'vendor', minChunks: Infinity, filename: 'vendor.js' }), new Webpack.optimize.AggressiveMergingPlugin(), new Webpack.HotModuleReplacementPlugin(), new Webpack.NamedModulesPlugin(), new Webpack.NoEmitOnErrorsPlugin(), new HtmlWebpackPlugin({ template: Path.resolve(__dirname, '../../public/index.html') }), ] });