diff --git a/config/webpack.config.prod.js b/config/webpack.config.prod.js index afb834a8..ee517270 100644 --- a/config/webpack.config.prod.js +++ b/config/webpack.config.prod.js @@ -62,7 +62,29 @@ module.exports = { minimize: true, runtimeChunk: 'single', splitChunks: { - chunks:'all', + chunks: 'all', + maxSize: 244000, + cacheGroups: { + vendor: { + test: /[\\/]node_modules[\\/]/, + name: 'vendors', + chunks: 'all', + priority: 10, + }, + common: { + name: 'common', + minChunks: 2, + chunks: 'all', + priority: 5, + reuseExistingChunk: true, + }, + data: { + test: /[\\/]src[\\/]data[\\/]/, + name: 'data', + chunks: 'all', + priority: 15, + }, + }, }, }, output: { diff --git a/package.json b/package.json index d3795c0e..57ba2adc 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "dotenv-expand": "4.2.0", "front-matter": "^2.3.0", "fs-extra": "3.0.1", - "gh-pages": "^2.0.1", "history": "^4.7.2", "html-truncate": "^1.2.2", "lodash.foreach": "^4.5.0", @@ -44,12 +43,10 @@ "start-js": "NODE_OPTIONS=--openssl-legacy-provider node scripts/start.js", "start": "npm-run-all -p watch-css start-js", "serve-build": "yarn run serve -s build", - "build-js": "NODE_OPTIONS=--openssl-legacy-provider node scripts/build.js", + "build-js": "NODE_OPTIONS=\"--openssl-legacy-provider --max-old-space-size=4096\" node scripts/build.js", "build": "npm-run-all build-css build-js && cp build/index.html build/404.html", "watch-css": "npm run build-css -- --watch", "build-css": "sass --load-path ./src --load-path ./node_modules src/:src/ --no-source-map", - "predeploy": "yarn run build", - "deploy": "gh-pages -b master -d build", "lint": "eslint src", "test": "node scripts/test.js --env=jsdom", "storybook": "start-storybook -p 9001 -c .storybook" diff --git a/src/Router/Router.js b/src/Router/Router.js index cd928e0c..9a1a754a 100644 --- a/src/Router/Router.js +++ b/src/Router/Router.js @@ -1,14 +1,15 @@ -import React, { Component } from 'react' +import React, { Component, Suspense } from 'react' import { BrowserRouter, Redirect, Route, Switch } from 'react-router-dom' import App from 'components/App' -import BlogIndex from 'pages/BlogIndex' -import BlogShow from 'pages/BlogShow' -import Downloads from 'pages/Downloads' -import Home from 'pages/Home' -import NotFound from 'pages/NotFound' import osqueryVersionsData from 'data/osquery_metadata' -import Schema from 'pages/Schema' + +const Home = React.lazy(() => import('pages/Home')) +const BlogIndex = React.lazy(() => import('pages/BlogIndex')) +const BlogShow = React.lazy(() => import('pages/BlogShow')) +const Downloads = React.lazy(() => import('pages/Downloads')) +const Schema = React.lazy(() => import('pages/Schema')) +const NotFound = React.lazy(() => import('pages/NotFound')) const currentOsqueryVersion = osqueryVersionsData.current_version @@ -17,65 +18,69 @@ class Router extends Component { return ( - - - } - /> - } - /> - - - - - - - - - ( - // This render function is a redirect that preserves the search - // and hash params. This allows linking directly to tables - // without knowing the version number in advance. - - )} - /> - - + Loading...} + > + + + } + /> + } + /> + + + + + + + + + ( + // This render function is a redirect that preserves the search + // and hash params. This allows linking directly to tables + // without knowing the version number in advance. + + )} + /> + + + ) diff --git a/src/pages/BlogIndex/BlogIndex.js b/src/pages/BlogIndex/BlogIndex.js index 7786ecba..05d0d581 100644 --- a/src/pages/BlogIndex/BlogIndex.js +++ b/src/pages/BlogIndex/BlogIndex.js @@ -1,5 +1,4 @@ import React, { Component } from 'react' -import showdown from 'showdown' import { withRouter } from 'react-router' import { Link } from 'react-router-dom' import truncate from 'html-truncate' @@ -18,7 +17,14 @@ class BlogIndex extends Component { constructor(props) { super(props) - this.converter = new showdown.Converter() + this.converter = null + this.initShowdown() + } + + async initShowdown() { + const showdown = await import('showdown') + this.converter = new showdown.default.Converter() + this.forceUpdate() } onToggleBlogType = blogType => () => @@ -55,7 +61,7 @@ class BlogIndex extends Component { {activeBlogPosts.map((blogPost, idx) => { const { attributes, body } = blogPost - const html = truncate(converter.makeHtml(body), 400) + const html = converter ? truncate(converter.makeHtml(body), 400) : 'Loading...' const blogPath = `${process.env.PUBLIC_URL}/blog/${attributes.slugifiedTitle}` const isLastPost = idx === activeBlogPosts.length - 1 diff --git a/src/pages/BlogShow/BlogShow.js b/src/pages/BlogShow/BlogShow.js index dca3a7dc..3699059e 100644 --- a/src/pages/BlogShow/BlogShow.js +++ b/src/pages/BlogShow/BlogShow.js @@ -1,6 +1,5 @@ import React, { Component } from 'react' import forEach from 'lodash.foreach' -import showdown from 'showdown' import { withRouter } from 'react-router' import BlogPost from 'components/BlogPost' @@ -15,7 +14,7 @@ class BlogShow extends Component { constructor(props) { super(props) - this.converter = new showdown.Converter({ tables: true }) + this.converter = null this.state = { blogPost: undefined, @@ -23,17 +22,26 @@ class BlogShow extends Component { } } - componentDidMount() { + async componentDidMount() { const { blogTitle } = this.state const blogPost = blogPosts.find(post => post.attributes.slugifiedTitle === blogTitle) + if (blogPost) { + const showdown = await import('showdown') + this.converter = new showdown.default.Converter({ tables: true }) + } + this.setState({ blogPost }) } get htmlWithImages() { const { body } = this.state.blogPost + if (!this.converter) { + return 'Loading...' + } + let html = this.converter.makeHtml(body) forEach(images, (path, name) => { diff --git a/yarn.lock b/yarn.lock index da52de54..f1fccfa9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2744,7 +2744,7 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^2.1.4, async@^2.5.0, async@^2.6.1, async@^2.6.2: +async@^2.1.4, async@^2.5.0, async@^2.6.2: version "2.6.4" resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== @@ -4085,7 +4085,7 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@~2.20.0: +commander@^2.19.0, commander@^2.20.0, commander@~2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -5099,11 +5099,6 @@ elliptic@^6.0.0, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -email-addresses@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.0.3.tgz#fc3c6952f68da24239914e982c8a7783bc2ed96d" - integrity sha512-kUlSC06PVvvjlMRpNIl3kR1NRXLEe86VQ7N0bQeaCZb2g+InShCeHQp/JvyYNTugMnRN2NvJhHlc3q12MWbbpg== - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -5772,28 +5767,6 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -filename-reserved-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4" - integrity sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q= - -filenamify-url@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filenamify-url/-/filenamify-url-1.0.0.tgz#b32bd81319ef5863b73078bed50f46a4f7975f50" - integrity sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A= - dependencies: - filenamify "^1.0.0" - humanize-url "^1.0.0" - -filenamify@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5" - integrity sha1-qfL/0RxQO+0wABUCknI3jx8TZaU= - dependencies: - filename-reserved-regex "^1.0.0" - strip-outer "^1.0.0" - trim-repeated "^1.0.0" - filesize@3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" @@ -6242,20 +6215,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -gh-pages@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.0.1.tgz#aefe47a43b8d9d2aa3130576b33fe95641e29a2f" - integrity sha512-uFlk3bukljeiWKQ2XvPfjcSi/ou7IfoDf2p+Fj672saLAr8bnOdFVqI/JSgrSgInKpCg5BksxEwGUl++dbg8Dg== - dependencies: - async "^2.6.1" - commander "^2.18.0" - email-addresses "^3.0.1" - filenamify-url "^1.0.0" - fs-extra "^7.0.0" - globby "^6.1.0" - graceful-fs "^4.1.11" - rimraf "^2.6.2" - glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -6818,14 +6777,6 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -humanize-url@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff" - integrity sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8= - dependencies: - normalize-url "^1.0.0" - strip-url-auth "^1.0.0" - hyphenate-style-name@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" @@ -9051,7 +9002,7 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= -normalize-url@1.9.1, normalize-url@^1.0.0, normalize-url@^1.4.0: +normalize-url@1.9.1, normalize-url@^1.4.0: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= @@ -11311,7 +11262,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2, rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2: +rimraf@2, rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -12234,18 +12185,6 @@ strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-outer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== - dependencies: - escape-string-regexp "^1.0.2" - -strip-url-auth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" - integrity sha1-IrD6OkE4WzO+PzMVUbu4N/oM164= - style-loader@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759" @@ -12587,13 +12526,6 @@ trim-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= - dependencies: - escape-string-regexp "^1.0.2" - trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"