mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 05:07:41 +00:00
195 lines
5.8 KiB
JavaScript
195 lines
5.8 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 AngularTemplateCacheWebpackPlugin = require('angular-templatecache-webpack-plugin');
|
|
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
|
const ClosureWebpackPlugin = require('closure-webpack-plugin');
|
|
const CopyPlugin = require('copy-webpack-plugin');
|
|
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
|
|
const DependencyListPlugin = require('./plugins/dependency-list-plugin');
|
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
|
const webpack = require('webpack');
|
|
|
|
module.exports = {
|
|
|
|
bail: true,
|
|
mode: 'production',
|
|
stats: 'minimal',
|
|
|
|
output: {
|
|
path: __dirname + '/dist',
|
|
filename: 'guacamole.[contenthash].js',
|
|
},
|
|
|
|
// Generate source maps
|
|
devtool: 'source-map',
|
|
|
|
// Entry point for the Guacamole webapp is the "index" AngularJS module
|
|
entry: './src/app/index/indexModule.js',
|
|
|
|
module: {
|
|
rules: [
|
|
|
|
// NOTE: This is required in order to parse ES2020 language features,
|
|
// like the optional chaining and nullish coalescing operators. It
|
|
// specifically needs to operate on the node-modules directory since
|
|
// Webpack 4 cannot handle such language features.
|
|
{
|
|
test: /\.js$/i,
|
|
use: {
|
|
loader: 'babel-loader',
|
|
options: {
|
|
presets: [
|
|
['@babel/preset-env']
|
|
]
|
|
}
|
|
}
|
|
},
|
|
|
|
// Automatically extract imported CSS for later reference within separate CSS file
|
|
{
|
|
test: /\.css$/i,
|
|
use: [
|
|
MiniCssExtractPlugin.loader,
|
|
{
|
|
loader: 'css-loader',
|
|
options: {
|
|
import: false,
|
|
url: false
|
|
}
|
|
}
|
|
]
|
|
},
|
|
|
|
/*
|
|
* Necessary to be able to use angular 1 with webpack as explained in https://github.com/webpack/webpack/issues/2049
|
|
*/
|
|
{
|
|
test: require.resolve('angular'),
|
|
loader: 'exports-loader',
|
|
options: {
|
|
type: 'commonjs',
|
|
exports: 'single window.angular'
|
|
}
|
|
}
|
|
|
|
]
|
|
},
|
|
optimization: {
|
|
minimizer: [
|
|
|
|
// Minify using Google Closure Compiler
|
|
new ClosureWebpackPlugin({ mode: 'STANDARD' }, {
|
|
languageIn: 'ECMASCRIPT_2020',
|
|
languageOut: 'ECMASCRIPT5',
|
|
compilationLevel: 'SIMPLE'
|
|
}),
|
|
|
|
new CssMinimizerPlugin()
|
|
|
|
],
|
|
splitChunks: {
|
|
cacheGroups: {
|
|
|
|
// Bundle CSS as one file
|
|
styles: {
|
|
name: 'styles',
|
|
test: /\.css$/,
|
|
chunks: 'all',
|
|
enforce: true
|
|
}
|
|
|
|
}
|
|
}
|
|
},
|
|
plugins: [
|
|
|
|
new AngularTemplateCacheWebpackPlugin({
|
|
module: 'templates-main',
|
|
root: 'app/',
|
|
source: 'src/app/**/*.html',
|
|
standalone: true
|
|
}),
|
|
|
|
// Automatically clean out dist/ directory
|
|
new CleanWebpackPlugin(),
|
|
|
|
// Copy static files to dist/
|
|
new CopyPlugin([
|
|
{ from: 'app/**/*' },
|
|
{ from: 'fonts/**/*' },
|
|
{ from: 'images/**/*' },
|
|
{ from: 'layouts/**/*' },
|
|
{ from: 'manifest.json' },
|
|
{ from: 'translations/**/*' },
|
|
{ from: 'verifyCachedVersion.js' }
|
|
], {
|
|
context: 'src/'
|
|
}),
|
|
|
|
// Copy core libraries for global inclusion
|
|
new CopyPlugin([
|
|
{ from: 'angular/angular.min.js' },
|
|
{ from: 'blob-polyfill/Blob.js' },
|
|
{ from: 'datalist-polyfill/datalist-polyfill.min.js' },
|
|
{ from: 'jquery/dist/jquery.min.js' },
|
|
{ from: 'lodash/lodash.min.js' }
|
|
], {
|
|
context: 'node_modules/'
|
|
}),
|
|
|
|
// Generate index.html from template
|
|
new HtmlWebpackPlugin({
|
|
inject: false,
|
|
template: 'src/index.html'
|
|
}),
|
|
|
|
// Extract CSS from Webpack bundle as separate file
|
|
new MiniCssExtractPlugin({
|
|
filename: 'guacamole.[contenthash].css',
|
|
chunkFilename: '[id].guacamole.[contenthash].css'
|
|
}),
|
|
|
|
// List all bundled node modules for sake of automatic LICENSE file
|
|
// generation / sanity checks
|
|
new DependencyListPlugin(),
|
|
|
|
// Automatically require used modules
|
|
new webpack.ProvidePlugin({
|
|
jstz: 'jstz',
|
|
Pickr: '@simonwep/pickr',
|
|
saveAs: 'file-saver'
|
|
})
|
|
|
|
],
|
|
resolve: {
|
|
|
|
// Include Node modules and base source tree within search path for
|
|
// import/resolve
|
|
modules: [
|
|
'src',
|
|
'node_modules'
|
|
]
|
|
|
|
}
|
|
|
|
};
|
|
|