const path = require('path'); module.exports = { target: 'web', entry: { app: './public/app/index.ts', }, output: { path: path.resolve(__dirname, '../../public/build'), filename: '[name].[hash].js', // Keep publicPath relative for host.com/grafana/ deployments publicPath: 'public/build/', }, resolve: { extensions: ['.ts', '.tsx', '.es6', '.js', '.json', '.svg'], alias: {}, modules: [path.resolve('public'), path.resolve('node_modules')], }, stats: { children: false, warningsFilter: /export .* was not found in/, source: false }, node: { fs: 'empty', }, module: { rules: [{ test: require.resolve('jquery'), use: [{ loader: 'expose-loader', query: 'jQuery', }, { loader: 'expose-loader', query: '$', }, ], }, { test: /\.html$/, exclude: /(index|error)\-template\.html/, use: [{ loader: 'ngtemplate-loader?relativeTo=' + path.resolve(__dirname, '../../public') + '&prefix=public', }, { loader: 'html-loader', options: { attrs: [], minimize: true, removeComments: false, collapseWhitespace: false, }, }, ], }, ], }, // https://webpack.js.org/plugins/split-chunks-plugin/#split-chunks-example-3 optimization: { moduleIds: 'hashed', runtimeChunk: 'single', splitChunks: { chunks: 'all', minChunks: 1, cacheGroups: { moment: { test: /[\\/]node_modules[\\/]moment[\\/].*[jt]sx?$/, chunks: 'initial', priority: 20, enforce: true }, angular: { test: /[\\/]node_modules[\\/]angular[\\/].*[jt]sx?$/, chunks: 'initial', priority: 50, enforce: true }, vendors: { test: /[\\/]node_modules[\\/].*[jt]sx?$/, chunks: 'initial', priority: -10, reuseExistingChunk: true, enforce: true }, default: { priority: -20, chunks: 'all', test: /.*[jt]sx?$/, reuseExistingChunk: true }, }, }, }, };