UNPKG

generator-addin

Version:

MyGeotab/Geotab Drive add-in generator

134 lines (131 loc) 4.26 kB
const path = require('path'); const RemoveEmptyScriptsPlugin = require('webpack-remove-empty-scripts'); const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); const TerserPlugin = require("terser-webpack-plugin"); const ImageMinimizerPlugin = require('image-minimizer-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const { merge } = require('webpack-merge'); const common = require('./webpack.common.js'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const config = require('./src/app/config.json'); const ESLintPlugin = require('eslint-webpack-plugin'); /** * Removes "dev" element of the config tree on production build * * @param {Buffer} content content of file * @param {string} path path to file */ const transform = function (content, path) { let config = JSON.parse(content); let host = config.dev.dist.host; let len = config.items.length; // Appending the host to all item's url and icon for (let i = 0; i < len; i++) { config.items[i].url = host + config.items[i].url; config.items[i].icon = host + config.items[i].icon; } delete config['dev']; let response = JSON.stringify(config, null, 2); // Returned string is written to file return response; } module.exports = merge(common, { mode: 'production', entry: './src/app/index.js', module: { rules: [ { test: /\.css$/, exclude: /\.dev/, use: [ { loader: MiniCssExtractPlugin.loader, options: { publicPath: config.dev.dist.host } }, 'css-loader', { loader: './src/.dev/loaders/css-sandbox/css-sandbox.js', options: { prefix: '#<%= name%>' } } ] }, { test: /\.js$/, exclude: [/node_modules/, /\.dev/], use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'] } }, }, { test: /\.html$/, exclude: /\.dev/, use: [ { loader: 'html-loader', options: { minimize: true } } ] }, { test: /\.(png|svg|jpg|gif)$/, exclude: /\.dev/, type: 'asset/resource' } ] }, optimization: { minimize: true, minimizer: [ new CssMinimizerPlugin(), new TerserPlugin({ test: /\.js(\?.*)?$/i }) ] }, plugins: [ new ESLintPlugin({ extensions: ['js'], exclude: ['/node_modules/', '/\.dev/'], formatter: 'stylish' }), new RemoveEmptyScriptsPlugin(), new ImageMinimizerPlugin({ exclude: /dev/, test: /\.(jpe?g|png|gif|svg)$/, minimizerOptions: { plugins: [ ['gifsicle'], ['mozjpeg'], ['pngquant'], [ 'svgo', { plugins: [ { name: "cleanupIDs", active: false } ] } ] ] } }), new CopyWebpackPlugin({ patterns: [ { from: './src/app/images/icon.svg', to: 'images/' }, { from: './src/app/config.json', transform: transform }, { from: './src/app/translations/', to: 'translations/' } ] }) ], output: { publicPath: config.dev.dist.host, assetModuleFilename: '[name][ext][query]' } });