mirror of
https://github.com/bckelley/cgm-remote-monitor.git
synced 2026-08-24 03:14:12 -05:00
* upgrade webpack info * cleanup eslint findings * fix eslint formatter stylish error * lazy is invalid option for webpack dev middleware * upgrade webpack to 5.x * remove unsupported terser option * fix missing process polyfill dependency * try alternate proces fix * fix css image reference * add statements to import missing css files to index.html * TerserPlugin no longer required * add missing css links * remove terser Co-authored-by: Jeremy Cunningham <jpcunningh@gmail.com> Co-authored-by: Sulka Haro <sulka@sulka.net>
179 lines
5.1 KiB
JavaScript
179 lines
5.1 KiB
JavaScript
const path = require('path');
|
||
const webpack = require('webpack');
|
||
const MomentLocalesPlugin = require('moment-locales-webpack-plugin');
|
||
const pluginArray = [];
|
||
const sourceMapType = 'source-map';
|
||
const MomentTimezoneDataPlugin = require('moment-timezone-data-webpack-plugin');
|
||
|
||
/*
|
||
if (process.env.NODE_ENV === 'development') {
|
||
console.log('Development environment detected, enabling Bundle Analyzer');
|
||
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
|
||
|
||
pluginArray.push(new BundleAnalyzerPlugin({
|
||
// Can be `server`, `static` or `disabled`.
|
||
// In `server` mode analyzer will start HTTP server to show bundle report.
|
||
// In `static` mode single HTML file with bundle report will be generated.
|
||
// In `disabled` mode you can use this plugin to just generate Webpack Stats JSON file by setting
|
||
// `generateStatsFile` to `true`.
|
||
analyzerMode: 'static',
|
||
// Host that will be used in `server` mode to start HTTP server.
|
||
analyzerHost: '127.0.0.1',
|
||
// Port that will be used in `server` mode to start HTTP server.
|
||
analyzerPort: 8888,
|
||
// Path to bundle report file that will be generated in `static` mode.
|
||
// Relative to bundles output directory.
|
||
reportFilename: 'bundle_report.html',
|
||
// Module sizes to show in report by default.
|
||
// Should be one of `stat`, `parsed` or `gzip`.
|
||
// See "Definitions" section for more information.
|
||
defaultSizes: 'parsed',
|
||
// Automatically open report in default browser
|
||
openAnalyzer: true,
|
||
// If `true`, Webpack Stats JSON file will be generated in bundles output directory
|
||
generateStatsFile: false,
|
||
// Name of Webpack Stats JSON file that will be generated if `generateStatsFile` is `true`.
|
||
// Relative to bundles output directory.
|
||
statsFilename: 'stats.json',
|
||
// Options for `stats.toJson()` method.
|
||
// For example you can exclude sources of your modules from stats file with `source: false` option.
|
||
// See more options here: https://github.com/webpack/webpack/blob/webpack-1/lib/Stats.js#L21
|
||
statsOptions: null,
|
||
// Log level. Can be 'info', 'warn', 'error' or 'silent'.
|
||
logLevel: 'info'
|
||
}));
|
||
}
|
||
*/
|
||
|
||
pluginArray.push(new webpack.ProvidePlugin({
|
||
$: 'jquery',
|
||
jQuery: 'jquery',
|
||
'window.jQuery': 'jquery',
|
||
'window.$': 'jquery'
|
||
}));
|
||
|
||
pluginArray.push(new webpack.ProvidePlugin({
|
||
process: 'process/browser',
|
||
}));
|
||
|
||
// limit Timezone data from Moment
|
||
|
||
pluginArray.push(new MomentTimezoneDataPlugin({
|
||
startYear: 2010,
|
||
endYear: new Date().getFullYear() + 10,
|
||
}));
|
||
|
||
// Strip all locales except the ones defined in lib/language.js
|
||
// (“en” is built into Moment and can’t be removed, 'dk' is not defined in moment)
|
||
pluginArray.push(new MomentLocalesPlugin({
|
||
localesToKeep: ['bg', 'cs', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'it', 'ko', 'nb', 'nl', 'pl', 'pt', 'ro', 'ru',
|
||
'sk', 'sv', 'zh_cn', 'zh_tw'
|
||
],
|
||
}));
|
||
|
||
if (process.env.NODE_ENV === 'development') {
|
||
const ESLintPlugin = require('eslint-webpack-plugin');
|
||
pluginArray.push(new ESLintPlugin({
|
||
emitWarning: true,
|
||
failOnError: false,
|
||
failOnWarning: false,
|
||
formatter: require('eslint').CLIEngine.getFormatter('stylish'),
|
||
overrideConfig: {
|
||
globals: {
|
||
'$': 'writeable'
|
||
}
|
||
}
|
||
}));
|
||
}
|
||
|
||
const rules = [
|
||
{
|
||
test: /\.(js|jsx)$/,
|
||
use: {
|
||
loader: 'babel-loader',
|
||
options: {
|
||
babelrc: true,
|
||
cacheDirectory: true,
|
||
extends: path.join(__dirname + '/.babelrc')
|
||
}
|
||
}
|
||
},
|
||
{
|
||
test: /\.css$/i,
|
||
use: [ 'style-loader',
|
||
{
|
||
loader: 'css-loader',
|
||
options: {
|
||
sourceMap: true,
|
||
},
|
||
} ],
|
||
exclude: /node_modules/
|
||
},
|
||
{
|
||
test: /\.(jpe?g|png|gif)$/i,
|
||
loader: 'file-loader',
|
||
options: {
|
||
outputPath: 'images'
|
||
//the images will be emmited to public/assets/images/ folder
|
||
//the images will be put in the DOM <style> tag as eg. background: url(assets/images/image.png);
|
||
},
|
||
exclude: /node_modules/
|
||
},
|
||
{
|
||
test: require.resolve('jquery'),
|
||
loader: 'expose-loader',
|
||
options: {
|
||
exposes: ['$']
|
||
}
|
||
}
|
||
];
|
||
|
||
const appEntry = ['./bundle/bundle.source.js'];
|
||
const clockEntry = ['./bundle/bundle.clocks.source.js'];
|
||
|
||
let mode = 'production';
|
||
let publicPath = '/bundle/';
|
||
|
||
if (process.env.NODE_ENV === 'development') {
|
||
mode = 'development';
|
||
publicPath = '/devbundle/';
|
||
pluginArray.push(new webpack.HotModuleReplacementPlugin());
|
||
pluginArray.push(new webpack.NoEmitOnErrorsPlugin());
|
||
|
||
const hot = 'webpack-hot-middleware/client?port=1337';
|
||
|
||
appEntry.unshift(hot);
|
||
clockEntry.unshift(hot);
|
||
}
|
||
|
||
const optimization = {};
|
||
|
||
module.exports = {
|
||
mode,
|
||
context: __dirname,
|
||
context: path.resolve(__dirname, '.'),
|
||
entry: {
|
||
app: appEntry,
|
||
clock: clockEntry
|
||
},
|
||
output: {
|
||
path: path.resolve(__dirname, './tmp/public'),
|
||
publicPath,
|
||
filename: 'js/bundle.[name].js',
|
||
sourceMapFilename: 'js/bundle.[name].js.map',
|
||
},
|
||
devtool: sourceMapType,
|
||
optimization,
|
||
plugins: pluginArray,
|
||
module: {
|
||
rules
|
||
},
|
||
resolve: {
|
||
alias: {
|
||
stream: 'stream-browserify',
|
||
crypto: 'crypto-browserify',
|
||
buffer: 'buffer',
|
||
}
|
||
}
|
||
};
|