summaryrefslogtreecommitdiffstats
path: root/sdnr/wt/odlux/framework/webpack.config.js
blob: cef310136f30522e7f5ffd1b2cffa7086c3692db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<
/**
 * ============LICENSE_START========================================================================
 * ONAP : ccsdk feature sdnr wt odlux
 * =================================================================================================
 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
 * =================================================================================================
 * Licensed 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.
 * ============LICENSE_END==========================================================================
 */
/**
 * Webpack 4 configuration file
 * see https://webpack.js.org/configuration/
 * see https://webpack.js.org/configuration/dev-server/
 */

"use strict";

const path = require("path");
const webpack = require("webpack");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const requirejsPlugin = require('requirejs-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');

// const __dirname = (path => path.replace(/^([a-z]\:)/, c => c.toUpperCase()))(process.__dirname());

module.exports = (env) => {
  const distPath = path.resolve(__dirname, env === "release" ? "." : "..", "dist");
  const frameworkPath = path.resolve(__dirname, env === "release" ? "." : "..", "dist");
  return [{
    name: "Client",
    mode: "none", //disable default behavior
    target: "web",

    context: path.resolve(__dirname, "src"),

    entry: {
      app: [
        "./run.ts",
        "./app.tsx",
        "./services",
        "./components/objectDump",
        "./components/material-table",
        "./components/material-ui",
        "./utilities/elasticSearch",
        "./models"],
    },

    devtool: env === "release" ? false : "source-map",

    resolve: {
      extensions: [".ts", ".tsx", ".js", ".jsx"]
    },

    output: {
      path: distPath,
      library: "[name]", // related to webpack.DllPlugin::name
      libraryTarget: "umd2",
      filename: "[name].js",
      chunkFilename: "[name].js"
    },

    module: {
      rules: [{
        test: /\.tsx?$/,
        exclude: /node_modules/,
        use: [{
          loader: "babel-loader"
        }, {
          loader: "ts-loader"
        }]
      }, {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        use: [{
          loader: "babel-loader"
        }]
      }, {
        //don't minify images
        test: /\.(png|gif|jpg|svg)$/,
        use: [{
          loader: 'url-loader',
          options: {
            limit: 10,
            name: './images/[name].[ext]'
          }
        }]
      }]
    },

    optimization: {
      noEmitOnErrors: true,
      namedModules: env !== "release",
      minimize: env === "release",
      minimizer: env !== "release" ? [] : [new TerserPlugin({
        terserOptions: {
          mangle: {
            reserved: ["./app.tsx"]
          },
          warnings: false, // false, true, "verbose"
          compress: {
            drop_console: true,
            drop_debugger: true,
          }
        }
      })],
    },

    plugins: [
      new CopyWebpackPlugin([{
        from: '../../node_modules/requirejs/require.js',
        to: '.'
      }, {
        from: './favicon.ico',
        to: '.'
      }, {
        from: env === "release" ? './index.html' : 'index.dev.html',
        to: './index.html'
      }]),
      new requirejsPlugin({
        path: distPath,
        filename: 'config.js',
        baseUrl: '',
        pathUrl: '',
        processOutput: function (assets) {
          let mainConfig =  JSON.stringify(assets, null, 2);
          mainConfig = mainConfig.slice(0,-1); // remove closing bracket from string
          const entireConfig = mainConfig.concat(", waitSeconds: 30}"); // add waitSeconds to config
          return 'require.config(' + entireConfig + ')';
        }
      }),
      // new HtmlWebpackPlugin({
      //   filename: "index.html",
      //   template: "./index.html",
      //   inject: "head"
      // }),
      // new HtmlWebpackIncludeAssetsPlugin({
      //    assets: ['vendor.js'],
      //    append: false
      // }),
      new webpack.DllReferencePlugin({
        context: path.resolve(__dirname, "src"),
        manifest: require(path.resolve(frameworkPath, "vendor-manifest.json")),
        sourceType: "umd2"
      }),
      new webpack.DllPlugin({
        context: path.resolve(__dirname, "src"),
        name: "[name]",
        path: path.resolve(distPath, "[name]-manifest.json")
      }),
      ...(env === "release") ? [
        new webpack.DefinePlugin({
          "process.env": {
            NODE_ENV: "'production'",
            VERSION: JSON.stringify(require("./package.json").version)
          }
        }),
      ] : [
          new webpack.HotModuleReplacementPlugin(),
          new webpack.DefinePlugin({
            "process.env": {
              NODE_ENV: "'development'",
              VERSION: JSON.stringify(require("./package.json").version)
            }
          }),
          new webpack.WatchIgnorePlugin([
            /css\.d\.ts$/,
            /less\.d\.ts$/
          ]),
          new CopyWebpackPlugin([{
            from: './assets/version.json',
            to: './version.json'
          }])
        ]
    ],

    devServer: {
      public: "http://localhost:3100",
      contentBase: distPath,

      compress: true,
      headers: {
        "Access-Control-Allow-Origin": "*"
      },
      host: "0.0.0.0",
      port: 3100,
      disableHostCheck: true,
      historyApiFallback: true,
      inline: true,
      hot: false,
      quiet: false,
      stats: {
        colors: true
      },
      proxy: {
        "/about": {
          // target: "http://10.20.6.29:48181",
          target: "http://localhost:18181",
          secure: false
        }, 
        "/yang-schema/": {
          target: "http://localhost:18181",
          secure: false
        },   
        "/oauth/": {
          // target: "https://10.20.35.188:30205",
          target: "http://localhost:18181",
          secure: false
        },
        "/oauth2/": {
          // target: "https://10.20.35.188:30205",
          target: "http://localhost:18181",
          secure: false
        },
        "/database/": {
          target: "http://localhost:18181",
          secure: false
        },
        "/restconf/": {
          target: "http://localhost:18181",
          secure: false
        },
        "/rests/": {
          target: "http://localhost:18181",
          secure: false
        },
        "/help/": {
          target: "http://localhost:18181",
          secure: false
        },
         "/about/": {
          target: "http://localhost:18181",
          secure: false
        },
        "/tree/": {
          target: "http://localhost:18181",
          secure: false
        },
        "/websocket": {
          target: "http://localhost:18181",
          ws: true,
          changeOrigin: true,
          secure: false
        },
        "/apidoc": {
          target: "http://localhost:18181",
          ws: true,
          changeOrigin: true,
          secure: false
        }
      }
    }
  }];
}