const webpack = require('webpack'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); const path = require('path'); const utils = require('./utils.js'); const getTsLoaderRule = env => { const rules = [ { loader: 'cache-loader', options: { cacheDirectory: path.resolve('build/cache-loader') } }, { loader: 'thread-loader', options: { // there should be 1 cpu for the fork-ts-checker-webpack-plugin workers: require('os').cpus().length - 1 } }, { loader: 'ts-loader', options: { transpileOnly: true, happyPackMode: true } } ]; if (env === 'development') { rules.unshift({ loader: 'react-hot-loader/webpack' }); } return rules; }; module.exports = options => ({ cache: options.env !== 'production', resolve: { extensions: [ '.js', '.jsx', '.ts', '.tsx', '.json' ], modules: ['node_modules'], alias: { app: utils.root('src/main/webapp/app/') } }, module: { rules: [ { test: /\.tsx?$/, use: getTsLoaderRule(options.env), include: [utils.root('./src/main/webapp/app')], exclude: ['node_modules'] }, { test: /\.(jpe?g|png|gif|svg|woff2?|ttf|eot)$/i, loaders: ['file-loader?hash=sha512&digest=hex&name=content/[hash].[ext]'] }, { enforce: 'pre', test: /\.jsx?$/, loader: 'source-map-loader' }, { test: /\.tsx?$/, enforce: 'pre', loaders: 'tslint-loader', exclude: ['node_modules'] } ] }, stats: { children: false }, optimization: { splitChunks: { cacheGroups: { commons: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all' } } } }, plugins: [ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: `'${options.env}'`, VERSION: `'${utils.parseVersion()}'`, DEBUG_INFO_ENABLED: options.env === 'development', // The root URL for API calls, ending with a '/' - for example: `"https://www.jhipster.tech:8081/myservice/"`. // If this URL is left empty (""), then it will be relative to the current context. // If you use an API server, in `prod` mode, you will need to enable CORS // (see the `jhipster.cors` common JHipster property in the `application-*.yml` configurations) SERVER_API_URL: `''` } }), new ForkTsCheckerWebpackPlugin({ tslint: true }), new CopyWebpackPlugin([ { from: './node_modules/swagger-ui/dist/css', to: 'swagger-ui/dist/css' }, { from: './node_modules/swagger-ui/dist/lib', to: 'swagger-ui/dist/lib' }, { from: './node_modules/swagger-ui/dist/swagger-ui.min.js', to: 'swagger-ui/dist/swagger-ui.min.js' }, { from: './src/main/webapp//swagger-ui/', to: 'swagger-ui' }, { from: './src/main/webapp/static/', to: 'content' }, { from: './src/main/webapp/favicon.ico', to: 'favicon.ico' }, { from: './src/main/webapp/manifest.webapp', to: 'manifest.webapp' }, // jhipster-needle-add-assets-to-webpack - JHipster will add/remove third-party resources in this array { from: './src/main/webapp/robots.txt', to: 'robots.txt' } ]), new HtmlWebpackPlugin({ template: './src/main/webapp/index.html', chunksSortMode: 'dependency', inject: 'body' }), ] });