aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/config/webpack.config.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-web/config/webpack.config.js')
-rw-r--r--server/sonar-web/config/webpack.config.js189
1 files changed, 0 insertions, 189 deletions
diff --git a/server/sonar-web/config/webpack.config.js b/server/sonar-web/config/webpack.config.js
deleted file mode 100644
index dbaaac11938..00000000000
--- a/server/sonar-web/config/webpack.config.js
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2021 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-/* eslint-disable import/no-extraneous-dependencies, complexity */
-const path = require('path');
-const CleanWebpackPlugin = require('clean-webpack-plugin');
-const CopyWebpackPlugin = require('copy-webpack-plugin');
-const MiniCssExtractPlugin = require('mini-css-extract-plugin');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const LodashPlugin = require('lodash-webpack-plugin');
-const webpack = require('webpack');
-const InterpolateHtmlPlugin = require('./InterpolateHtmlPlugin');
-const paths = require('./paths');
-const utils = require('./utils');
-
-module.exports = ({ production = true, release = false }) => {
- const timestamp = Date.now();
-
- const commonConfig = {
- mode: production ? 'production' : 'development',
- devtool: production && release ? 'source-map' : 'cheap-module-source-map',
- resolve: {
- // Add '.ts' and '.tsx' as resolvable extensions.
- extensions: ['.ts', '.tsx', '.js', '.json'],
- // import from 'Docs/foo.md' is rewritten to import from 'sonar-docs/src/foo.md'
- alias: {
- Docs: path.resolve(__dirname, '../../sonar-docs/src'),
- // d3-selection exports an event object, which requires live-binding.
- // In order to support this, we need to tell Webpack to NOT look into
- // the dist/ folder of this module, but in the src/ folder instead.
- // See https://github.com/d3/d3-selection#event
- 'd3-selection': path.resolve(__dirname, '../node_modules/d3-selection/src/index.js')
- }
- },
- optimization: {
- splitChunks: {
- chunks: 'all',
- automaticNameDelimiter: '-'
- },
- minimize: production && release
- }
- };
-
- const commonRules = [
- {
- // extract styles from 'app/' into separate file
- test: /\.css$/,
- include: path.resolve(__dirname, '../src/main/js/app/styles'),
- use: [
- production ? MiniCssExtractPlugin.loader : 'style-loader',
- utils.cssLoader(),
- utils.postcssLoader(production)
- ]
- },
- {
- // inline all other styles
- test: /\.css$/,
- exclude: path.resolve(__dirname, '../src/main/js/app/styles'),
- use: ['style-loader', utils.cssLoader(), utils.postcssLoader(production)]
- },
- {
- test: /\.md$/,
- use: 'raw-loader'
- },
- { test: require.resolve('react'), loader: 'expose-loader?React' },
- { test: require.resolve('react-dom'), loader: 'expose-loader?ReactDOM' },
- {
- test: /\.directory-loader\.js$/,
- loader: path.resolve(__dirname, 'documentation-loader/index.js')
- }
- ];
-
- const commonPlugins = [
- production &&
- new MiniCssExtractPlugin({
- filename: 'css/[name].[chunkhash:8].css',
- chunkFilename: 'css/[name].[chunkhash:8].chunk.css'
- }),
-
- new LodashPlugin({
- // keep these features
- // https://github.com/lodash/lodash-webpack-plugin#feature-sets
- shorthands: true,
- collections: true,
- exotics: true, // used to compare "exotic" values, like dates
- memoizing: true,
- flattening: true
- })
- ];
-
- return [
- Object.assign({ name: 'modern' }, commonConfig, {
- entry: [
- !production && require.resolve('react-dev-utils/webpackHotDevClient'),
- !production && require.resolve('react-error-overlay'),
- './src/main/js/app/utils/setPublicPath.js',
- './src/main/js/app/index.ts'
- ].filter(Boolean),
- output: {
- path: paths.appBuild,
- pathinfo: !production,
- filename: production ? 'js/[name].m.[chunkhash:8].js' : 'js/[name].js',
- chunkFilename: production ? 'js/[name].m.[chunkhash:8].chunk.js' : 'js/[name].chunk.js'
- },
- module: {
- rules: [
- {
- test: /(\.js$|\.ts(x?)$)/,
- exclude: /(node_modules|libs)/,
- use: [
- { loader: 'babel-loader' },
- {
- loader: 'ts-loader',
- options: { transpileOnly: true }
- }
- ]
- },
- ...commonRules
- ]
- },
- plugins: [
- production && new CleanWebpackPlugin(),
-
- production &&
- new CopyWebpackPlugin([
- {
- from: paths.docImages,
- to: paths.appBuild + '/images/embed-doc/images'
- }
- ]),
-
- production &&
- new CopyWebpackPlugin([
- {
- from: paths.appPublic,
- to: paths.appBuild,
- ignore: [paths.appHtml]
- }
- ]),
-
- ...commonPlugins,
-
- new HtmlWebpackPlugin({
- inject: false,
- template: paths.appHtml,
- minify: utils.minifyParams({ production: production && release }),
- timestamp
- }),
-
- // keep `InterpolateHtmlPlugin` after `HtmlWebpackPlugin`
- !production &&
- new InterpolateHtmlPlugin({
- WEB_CONTEXT: process.env.WEB_CONTEXT || '',
- SERVER_STATUS: process.env.SERVER_STATUS || 'UP',
- INSTANCE: process.env.INSTANCE || 'SonarQube',
- OFFICIAL: process.env.OFFICIAL || 'true'
- }),
-
- !production && new webpack.HotModuleReplacementPlugin()
- ].filter(Boolean),
- performance:
- production && release
- ? {
- // ignore source maps and documentation chunk
- assetFilter: assetFilename =>
- !assetFilename.endsWith('.map') && !assetFilename.startsWith('js/docs'),
- maxAssetSize: 400000,
- hints: 'error'
- }
- : undefined
- })
- ];
-};