var path = require('path'); var webpack = require('webpack'); const CopyWebpackPlugin = require("copy-webpack-plugin"); const HtmlWebpackPlugin = require('html-webpack-plugin'); const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); const plugins = [ new CopyWebpackPlugin([{ from: "deploy", to: path.join(__dirname, "build") }]), new HtmlWebpackPlugin({ title: 'Caching', }), new ForkTsCheckerWebpackPlugin({ tslint: true, // memoryLimit: 4096, useTypescriptIncrementalApi: true }), new webpack.ProvidePlugin({ Buffer: ['buffer', 'Buffer'], }), new webpack.ProvidePlugin({ process: 'process/browser', }), new webpack.HotModuleReplacementPlugin(), ]; function transferEnvironmentVariables() { const prefix = "_CLIENT_"; const { parsed } = require('dotenv').config(); if (!parsed) { return; } const resolvedClientSide = Object.keys(parsed).reduce((mapping, envKey) => { if (envKey.startsWith(prefix)) { mapping[`process.env.${envKey.replace(prefix, "")}`] = JSON.stringify(parsed[envKey]); } return mapping; }, {}); plugins.push(new webpack.DefinePlugin(resolvedClientSide)); } transferEnvironmentVariables(); 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'], mobileInterface: ["./src/mobile/MobileMain.tsx", 'webpack-hot-middleware/client?reload=true'], }, devtool: "source-map", output: { filename: "[name].js", path: path.resolve(__dirname, "build"), publicPath: "/", }, resolve: { extensions: ['.js', '.ts', '.tsx'], fallback: { fs: false, tls: false, net: false, path: false, zlib: false, dns: false, crypto: false, assert: false, os: false, http: require.resolve("http-browserify"), https: require.resolve("https-browserify"), stream: require.resolve("stream-browserify"), buffer: require.resolve("buffer") } }, module: { rules: [{ test: [/\.tsx?$/], use: [{ loader: 'ts-loader', options: { transpileOnly: true } }] }, { test: /\.m?js/, resolve: { fullySpecified: false } }, { test: /\.(woff|woff2|ttf|eot|otf|svg)$/, use: 'file-loader?name=fonts/[name].[ext]!static' }, { 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 } }] } ], noParse: [require.resolve('typescript/lib/typescript.js')], }, plugins, externals: [ 'child_process' ], };