diff --git a/gulpfile.js b/gulpfile.js index 5164b87387ebb51afe39cf3dffd7f0f5d733fbf2..d07cdf4e2aba760dbb214630ab8cc31bf14fcdae 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -71,6 +71,7 @@ var gulp = require('gulp'), // Load webpack config var webpackDev = () => require(options.theme.app + 'webpack.dev.config.js'); var webpackProd = () => require(options.theme.app + 'webpack.prod.config.js'); +var webpackAnalyze = () => require(options.theme.app + 'webpack.analyze.config.js'); // The sass files to process. var sassFiles = [ @@ -184,6 +185,14 @@ gulp.task('app:production', function() { .pipe(gulp.dest(options.theme.app_dest)); }) +// Analyze Prod build of App +gulp.task('app:analyze', function() { + return gulp.src(options.theme.app + 'src/') + .pipe(webpackStrm( webpackAnalyze() )) + .pipe(gulp.dest(options.theme.app_dest)); +}) + + // Copy images. gulp.task('images', function copy () { return gulp.src(options.theme.img + '**/*.*').pipe(gulp.dest(options.theme.img_dest)); diff --git a/opentech/static_src/src/app/src/components/NoteListingItem/index.js b/opentech/static_src/src/app/src/components/NoteListingItem/index.js index 686828008a1e1e02529e0aecd36427d2f1eb446b..6e1a7bbe274113df9edcaa0dcd95fd4fd20679ec 100644 --- a/opentech/static_src/src/app/src/components/NoteListingItem/index.js +++ b/opentech/static_src/src/app/src/components/NoteListingItem/index.js @@ -1,6 +1,5 @@ import React from 'react'; import PropTypes from 'prop-types'; -import moment from 'moment'; import './styles.scss'; @@ -8,7 +7,7 @@ export default class NoteListingItem extends React.Component { static propTypes = { user: PropTypes.string.isRequired, message: PropTypes.string.isRequired, - timestamp: PropTypes.instanceOf(moment).isRequired, + timestamp: PropTypes.string.isRequired, }; parseUser() { @@ -28,7 +27,7 @@ export default class NoteListingItem extends React.Component { <li className="note"> <p className="note__meta"> <span>{this.parseUser()}</span> - <span className="note__date">{timestamp.format('ll')}</span> + <span className="note__date">{timestamp}</span> </p> <div className="note__content" dangerouslySetInnerHTML={{__html: message}} /> </li> diff --git a/opentech/static_src/src/app/src/containers/Note.js b/opentech/static_src/src/app/src/containers/Note.js index 9f297145bc34b0939cef8354166084d8db41435d..1c25964da05781d1f7e4b1767486242fc44bf2a3 100644 --- a/opentech/static_src/src/app/src/containers/Note.js +++ b/opentech/static_src/src/app/src/containers/Note.js @@ -1,7 +1,6 @@ import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; -import moment from 'moment'; import { getNoteOfID } from '@selectors/notes'; import NoteListingItem from '@components/NoteListingItem'; @@ -18,10 +17,12 @@ class Note extends React.Component { render() { const { note } = this.props; + const date = new Date(note.timestamp).toLocaleDateString('en-gb', {day: 'numeric', month: 'short', year:'numeric', timezone:'GMT'}) + return <NoteListingItem user={note.user} message={note.message} - timestamp={moment(note.timestamp)} + timestamp={date} />; } diff --git a/opentech/static_src/src/app/src/datetime.js b/opentech/static_src/src/app/src/datetime.js deleted file mode 100644 index f906f3acee590e92f3df0b5c7a9bb66a8ca79e24..0000000000000000000000000000000000000000 --- a/opentech/static_src/src/app/src/datetime.js +++ /dev/null @@ -1,8 +0,0 @@ -import moment from 'moment'; -import 'moment-timezone'; - -// Use GMT globally for all the dates. -moment.tz.setDefault('GMT'); - -// Use en-US locale for all the dates. -moment.locale('en'); diff --git a/opentech/static_src/src/app/webpack.analyze.config.js b/opentech/static_src/src/app/webpack.analyze.config.js new file mode 100644 index 0000000000000000000000000000000000000000..c7433c8dda03636b7d0d8403eff126f200ae27e1 --- /dev/null +++ b/opentech/static_src/src/app/webpack.analyze.config.js @@ -0,0 +1,9 @@ +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; + +var config = require('./webpack.prod.config.js') + +config.plugins = config.plugins.concat([ + new BundleAnalyzerPlugin(), +]) + +module.exports = config diff --git a/opentech/static_src/src/app/webpack.base.config.js b/opentech/static_src/src/app/webpack.base.config.js index 9942fe66aa894b2721a11ed82524f93bac79f9d1..571430574118e66326e3fa7328b9b77faf1d38b9 100644 --- a/opentech/static_src/src/app/webpack.base.config.js +++ b/opentech/static_src/src/app/webpack.base.config.js @@ -1,83 +1,91 @@ -var path = require('path'); +const webpack = require('webpack') +const path = require('path'); -var COMMON_ENTRY = ['@babel/polyfill', './src/datetime'] +var COMMON_ENTRY = ['@babel/polyfill'] -module.exports = { - context: __dirname, - entry: { - submissionsByRound: COMMON_ENTRY.concat(['./src/submissionsByRoundIndex']), - submissionsByStatus: COMMON_ENTRY.concat(['./src/submissionsByStatusIndex']), - }, +module.exports = (webpackEnv) => { + const isProduction = webpackEnv === "production" - output: { - filename: '[name]-[hash].js' - }, + return { + context: __dirname, - plugins: [], + mode: webpackEnv, - module: { - rules: [ - { - test: /\.jsx?$/, - loader: 'babel-loader', - include: [path.resolve(__dirname, './src')], - query: { - presets: ['@babel/preset-react', '@babel/preset-env'], - plugins: [ - 'react-hot-loader/babel', - '@babel/plugin-proposal-class-properties' - ] - }, - }, - { - test: /\.js$/, - exclude: /node_modules/, - include: [path.resolve(__dirname, './src')], - loader: 'eslint-loader', - options: { - configFile: path.resolve(__dirname, './.eslintrc'), + entry: { + submissionsByRound: COMMON_ENTRY.concat(['./src/submissionsByRoundIndex']), + submissionsByStatus: COMMON_ENTRY.concat(['./src/submissionsByStatusIndex']), + }, + + output: { + filename: '[name]-[hash].js' + }, + + plugins: [], + + module: { + rules: [ + { + test: /\.jsx?$/, + loader: 'babel-loader', + include: [path.resolve(__dirname, './src')], + query: { + presets: ['@babel/preset-react', '@babel/preset-env'], + plugins: [ + 'react-hot-loader/babel', + '@babel/plugin-proposal-class-properties' + ] + }, }, - }, - { - test: /\.scss$/, - use: [{ - loader: 'style-loader' - }, { - loader: 'css-loader', - options: { - sourceMap: true - } - }, { - loader: 'sass-loader', + { + test: /\.js$/, + exclude: /node_modules/, + include: [path.resolve(__dirname, './src')], + loader: 'eslint-loader', options: { - sourceMap: true, - data: '@import "main.scss";', - includePaths: [ - path.join(__dirname, 'src') - ] - } - }] - }, - { - test: /\.svg$/, - use: ['@svgr/webpack'] - } - ] - }, + configFile: path.resolve(__dirname, './.eslintrc'), + }, + }, + { + test: /\.scss$/, + use: [{ + loader: 'style-loader' + }, { + loader: 'css-loader', + options: { + sourceMap: !isProduction + } + }, { + loader: 'sass-loader', + options: { + sourceMap: !isProduction, + data: '@import "main.scss";', + includePaths: [ + path.join(__dirname, 'src') + ] + } + }] + }, + { + test: /\.svg$/, + use: ['@svgr/webpack'] + } + ] + }, - resolve: { - modules: ['node_modules', './src'], - extensions: ['.js', '.jsx'], - alias: { - '@components': path.resolve(__dirname, 'src/components'), - '@containers': path.resolve(__dirname, 'src/containers'), - '@redux': path.resolve(__dirname, 'src/redux'), - '@reducers': path.resolve(__dirname, 'src/redux/reducers'), - '@selectors': path.resolve(__dirname, 'src/redux/selectors'), - '@actions': path.resolve(__dirname, 'src/redux/actions'), - '@middleware': path.resolve(__dirname, 'src/redux/middleware'), - '@api': path.resolve(__dirname, 'src/api'), + resolve: { + modules: ['node_modules', './src'], + extensions: ['.js', '.jsx'], + alias: { + '@components': path.resolve(__dirname, 'src/components'), + '@containers': path.resolve(__dirname, 'src/containers'), + '@redux': path.resolve(__dirname, 'src/redux'), + '@reducers': path.resolve(__dirname, 'src/redux/reducers'), + '@selectors': path.resolve(__dirname, 'src/redux/selectors'), + '@actions': path.resolve(__dirname, 'src/redux/actions'), + '@middleware': path.resolve(__dirname, 'src/redux/middleware'), + '@api': path.resolve(__dirname, 'src/api'), + } } } }; diff --git a/opentech/static_src/src/app/webpack.dev.config.js b/opentech/static_src/src/app/webpack.dev.config.js index 9f5d6d2b0a140c2ae27c3c5e1dec84003c2e234e..8ce7675f049f2052dc44d2a3f34bbddadf197acd 100644 --- a/opentech/static_src/src/app/webpack.dev.config.js +++ b/opentech/static_src/src/app/webpack.dev.config.js @@ -4,11 +4,13 @@ var BundleTracker = require('webpack-bundle-tracker') var config = require('./webpack.base.config') +devConfig = config("development") + // override django's STATIC_URL for webpack bundles -config.output.publicPath = 'http://localhost:3000/app/' +devConfig.output.publicPath = 'http://localhost:3000/app/' // Add HotModuleReplacementPlugin and BundleTracker plugins -config.plugins = config.plugins.concat([ +devConfig.plugins = devConfig.plugins.concat([ new webpack.HotModuleReplacementPlugin(), new webpack.NoEmitOnErrorsPlugin(), new BundleTracker({filename: './opentech/static_compiled/app/webpack-stats.json'}), @@ -19,7 +21,7 @@ config.plugins = config.plugins.concat([ // Add a loader for JSX files with react-hot enabled -config.devServer = { +devConfig.devServer = { headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': '*', @@ -30,8 +32,6 @@ config.devServer = { overlay: true } -config.devtool = 'source-map' - -config.mode = "development" +devConfig.devtool = 'source-map' -module.exports = config +module.exports = devConfig diff --git a/opentech/static_src/src/app/webpack.prod.config.js b/opentech/static_src/src/app/webpack.prod.config.js index 9f85413c07e0cc3b652e0fb7135b675e634dfe07..3c3f33915ac5582965c552de873c286beeb5296a 100644 --- a/opentech/static_src/src/app/webpack.prod.config.js +++ b/opentech/static_src/src/app/webpack.prod.config.js @@ -3,9 +3,11 @@ var BundleTracker = require('webpack-bundle-tracker') var config = require('./webpack.base.config.js') -config.output.path = require('path').resolve('./assets/dist') +prodConfig = config('production') -config.plugins = config.plugins.concat([ +prodConfig.output.path = require('path').resolve('./assets/dist') + +prodConfig.plugins = prodConfig.plugins.concat([ new BundleTracker({filename: './opentech/static_compiled/app/webpack-stats-prod.json'}), new webpack.EnvironmentPlugin({ NODE_ENV: 'production', @@ -13,10 +15,7 @@ config.plugins = config.plugins.concat([ }), ]) -config.optimization = { - minimize: true -} +prodConfig.optimization = {} -config.mode = "production" -module.exports = config +module.exports = prodConfig diff --git a/package-lock.json b/package-lock.json index d10f0471c2081a3079170793b5d8651760f5bb49..21dbd1c760e7c4770198ebe8906ca35a967def00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1548,6 +1548,12 @@ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, "async-settle": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", @@ -1726,6 +1732,18 @@ "tweetnacl": "^0.14.3" } }, + "bfj": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", + "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "check-types": "^7.3.0", + "hoopy": "^0.1.2", + "tryer": "^1.0.0" + } + }, "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", @@ -2141,6 +2159,12 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "check-types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", + "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", + "dev": true + }, "chokidar": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", @@ -3242,6 +3266,12 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, + "ejs": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "dev": true + }, "electron-to-chromium": { "version": "1.3.95", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.95.tgz", @@ -4073,6 +4103,12 @@ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -5743,6 +5779,12 @@ "parse-passwd": "^1.0.0" } }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -7277,19 +7319,6 @@ } } }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, - "moment-timezone": { - "version": "0.5.23", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz", - "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==", - "requires": { - "moment": ">= 2.9.0" - } - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -7788,6 +7817,12 @@ "mimic-fn": "^1.0.0" } }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "dev": true + }, "opn": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", @@ -8495,18 +8530,7 @@ "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.1" - }, - "dependencies": { - "scheduler": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.1.tgz", - "integrity": "sha512-VJKOkiKIN2/6NOoexuypwSrybx13MY7NSy9RNt8wPvZDMRT1CW6qlpF5jXRToXNHz3uWzbm2elNpZfXfGPqP9A==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } + "scheduler": "^0.12.0" } }, "react-dom": { @@ -8517,7 +8541,7 @@ "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.1" + "scheduler": "^0.12.0" } }, "react-hot-loader": { @@ -9955,11 +9979,12 @@ "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", "dev": true, "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", + "debug": "^2.6.8", + "handle-thing": "^1.2.5", "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "spdy-transport": "^2.0.18" }, "dependencies": { "debug": { @@ -9979,12 +10004,13 @@ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", + "debug": "^2.6.8", + "detect-node": "^2.0.3", "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" }, "dependencies": { "debug": { @@ -10651,6 +10677,12 @@ "glob": "^7.1.2" } }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -11199,6 +11231,44 @@ "webpack-sources": "^1.3.0" } }, + "webpack-bundle-analyzer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz", + "integrity": "sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw==", + "dev": true, + "requires": { + "acorn": "^5.7.3", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "gzip-size": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", + "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^3.0.0" + } + } + } + }, "webpack-bundle-tracker": { "version": "0.4.2-beta", "resolved": "https://registry.npmjs.org/webpack-bundle-tracker/-/webpack-bundle-tracker-0.4.2-beta.tgz", @@ -11464,14 +11534,12 @@ "portfinder": "^1.0.9", "schema-utils": "^1.0.0", "selfsigned": "^1.9.1", - "semver": "^5.6.0", "serve-index": "^1.7.2", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "^4.0.0", + "spdy": "^3.4.1", "strip-ansi": "^3.0.0", "supports-color": "^5.1.0", - "url": "^0.11.0", "webpack-dev-middleware": "3.4.0", "webpack-log": "^2.0.0", "yargs": "12.0.2" @@ -11603,7 +11671,7 @@ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { - "execa": "^1.0.0", + "execa": "^0.10.0", "lcid": "^2.0.0", "mem": "^4.0.0" } @@ -11870,6 +11938,15 @@ "mkdirp": "^0.5.1" } }, + "ws": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz", + "integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, "x-is-string": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", diff --git a/package.json b/package.json index 87d561690312b3fd500b45eb93f058790a1a9454..ca632ef5baaa3cfad7a01d5f62bdd5ce3d535c0c 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,6 @@ "gulp-uglify": "^3.0.1", "humps": "^2.0.1", "js-cookie": "^2.2.0", - "moment": "^2.24.0", - "moment-timezone": "^0.5.23", "node-sass-import-once": "^1.2.0", "prop-types": "^15.6.2", "react": "^16.8.1", @@ -61,6 +59,7 @@ "sass-loader": "^7.1.0", "style-loader": "^0.23.1", "webpack": "^4.28.3", + "webpack-bundle-analyzer": "^3.0.3", "webpack-bundle-tracker": "^0.4.2-beta", "webpack-cli": "^3.1.2", "webpack-dev-server": "^3.1.14",