var path = require('path'); var webpack = require('webpack'); const CopyWebpackPlugin = require("copy-webpack-plugin"); const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); module.exports = { mode: 'development', entry: { bundle: ["./src/client/views/Main.tsx", 'webpack-hot-middleware/client?reload=true'], viewer: ["./src/debug/Viewer.tsx", 'webpack-hot-middleware/client?reload=true'], repl: ["./src/debug/Repl.tsx", 'webpack-hot-middleware/client?reload=true'], test: ["./src/debug/Test.tsx", 'webpack-hot-middleware/client?reload=true'], inkControls: ["./src/mobile/InkControls.tsx", 'webpack-hot-middleware/client?reload=true'], imageUpload: ["./src/mobile/ImageUpload.tsx", 'webpack-hot-middleware/client?reload=true'], }, optimization: { noEmitOnErrors: true }, devtool: "source-map", node: { fs: 'empty', module: 'empty', dns: 'mock', tls: 'mock', net: 'mock' }, output: { filename: "[name].js", path: path.resolve(__dirname, "build"), publicPath: "/" }, resolve: { extensions: ['.js', '.ts', '.tsx'] }, module: { rules: [ { test: [/\.tsx?$/], use: [ { loader: 'ts-loader', options: { transpileOnly: true } } ] }, { test: /\.scss|css$/, use: [ { loader: "style-loader" }, { loader: "css-loader" }, { loader: "sass-loader" } ] }, { test: /\.(jpg|png|pdf)$/, use: [ { loader: 'file-loader' } ] }, { test: /\.(png|jpg|gif)$/i, use: [ { loader: 'url-loader', options: { limit: 8192 } } ] }] }, plugins: [ new CopyWebpackPlugin([{ from: "deploy", to: path.join(__dirname, "build") }]), new ForkTsCheckerWebpackPlugin({ tslint: true, useTypescriptIncrementalApi: true }), new webpack.optimize.OccurrenceOrderPlugin(), new webpack.HotModuleReplacementPlugin(), ], devServer: { compress: false, host: "localhost", contentBase: path.join(__dirname, 'deploy'), port: 4321, hot: true, https: false, overlay: { warnings: true, errors: true } } };