druid/web-console/webpack.config.js

125 lines
3.7 KiB
JavaScript

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const process = require('process');
const path = require('path');
const postcssPresetEnv = require('postcss-preset-env');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const { version } = require('./package.json');
function friendlyErrorFormatter(e, colors) {
//const messageColor = error.severity === "warning" ? colors.bold.yellow : colors.bold.red;
// return (
// "Does not compute.... " +
// messageColor(Object.keys(error).map(key => `${key}: ${error[key]}`))
// );
return `${e.severity}: ${e.content} [TS${e.code}]\n at (${e.file}:${e.line}:${e.character})`;
}
module.exports = (env) => {
let druidUrl = ((env || {}).druid_host || process.env.druid_host || 'localhost');
if (!druidUrl.startsWith('http')) druidUrl = 'http://' + druidUrl;
if (!/:\d+$/.test(druidUrl)) druidUrl += ':8888';
const proxyTarget = {
target: druidUrl,
secure: false
};
return {
mode: process.env.NODE_ENV || 'development',
entry: {
'web-console': './src/entry.ts'
},
output: {
path: path.resolve(__dirname, './public'),
filename: `[name]-${version}.js`,
chunkFilename: `[name]-${version}.js`,
publicPath: '/public'
},
target: 'web',
resolve: {
extensions: ['.tsx', '.ts', '.html', '.js', '.json', '.scss', '.css']
},
devServer: {
publicPath: '/public',
index: './index.html',
openPage: 'unified-console.html',
port: 18081,
proxy: {
'/status': proxyTarget,
'/druid': proxyTarget,
'/proxy': proxyTarget
}
},
module: {
rules: [
{
test: /\.tsx?$/,
enforce: 'pre',
use: [
{
loader: 'tslint-loader',
options: {
configFile: 'tslint.json',
emitErrors: true,
fix: false // Set this to true to auto fix errors
}
}
]
},
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: [
{
loader: 'ts-loader',
options: {
errorFormatter: friendlyErrorFormatter
}
}
]
},
{
test: /\.s?css$/,
use: [
{loader: 'style-loader'}, // creates style nodes from JS strings
{loader: 'css-loader'}, // translates CSS into CommonJS
{
loader: 'postcss-loader',
options: {
ident: 'postcss',
plugins: () => [
postcssPresetEnv({
browsers: ['> 1%', 'last 3 versions', 'Firefox ESR', 'Opera 12.1']
})
]
}
},
{loader: 'sass-loader'} // compiles Sass to CSS, using Node Sass by default
]
}
]
},
plugins: [
// new BundleAnalyzerPlugin()
]
};
};