From 40919dec14087423d683860ee454626203579b53 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Sat, 16 Nov 2019 16:11:08 +0400 Subject: [PATCH] Add configuration and build changes --- .env.dist | 1 - .gitignore | 2 ++ config/template.json | 3 +++ next.config.js | 45 ++++++++++++++++++++++---------------------- package.json | 3 +-- scripts/build.sh | 2 +- scripts/path-map.js | 11 +++++++++++ 7 files changed, 40 insertions(+), 27 deletions(-) delete mode 100644 .env.dist create mode 100644 config/template.json diff --git a/.env.dist b/.env.dist deleted file mode 100644 index aa76df02a..000000000 --- a/.env.dist +++ /dev/null @@ -1 +0,0 @@ -GA_SECRET= diff --git a/.gitignore b/.gitignore index 039ed89fb..7581adf24 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ node_modules yarn-error.log *.sublime-project *.sublime-workspace +config/*.json +!config/template.json diff --git a/config/template.json b/config/template.json new file mode 100644 index 000000000..b86da9bd5 --- /dev/null +++ b/config/template.json @@ -0,0 +1,3 @@ +{ + "GA_SECRET": "" +} diff --git a/next.config.js b/next.config.js index f710eacd8..dccde0ff8 100644 --- a/next.config.js +++ b/next.config.js @@ -1,15 +1,8 @@ const path = require('path'); +const fs = require('fs'); const withSass = require('@zeit/next-sass'); const withCSS = require('@zeit/next-css'); const rehypePrism = require('@mapbox/rehype-prism'); -const { - getPageRoutes, - getGuideRoutes, - getRoadmapRoutes, -} = require("./scripts/path-map"); - -require('dotenv').config(); - const withMDX = require('@next/mdx')({ extension: /\.(md|mdx)?$/, options: { @@ -17,23 +10,30 @@ const withMDX = require('@next/mdx')({ }, }); -const options = { - exportPathMap: () => { - return { - ...getPageRoutes(), - ...getGuideRoutes(), - ...getRoadmapRoutes(), - }; - }, +const { getPathMap } = require("./scripts/path-map"); - // @todo read these from `process.env` and inject without having to write the vars here - env: { - GA_SECRET: process.env.GA_SECRET - }, +/** + * Loads the configuration for the given environment + * @param env + * @returns {*} + */ +const loadConfig = (env = 'dev') => { + const configPath = `./config/${env}.json`; + if (!fs.existsSync(configPath)) { + console.log(`Config file not found: ${configPath}`); + process.exit(1); + } - // Allow mdx and md files to be pages - pageExtensions: ['jsx', 'js', 'mdx', 'md'], + console.log(`Config file found: ${configPath}`); + + // @todo stringify the values for webpack - it doesn't understand objects + return require(configPath); +}; +const options = { + exportPathMap: getPathMap(), + env: loadConfig(process.env.NODE_ENV), + pageExtensions: ['jsx', 'js', 'mdx', 'md'], webpack(config, options) { // // Transforms SVGs to components config.module.rules.push({ @@ -58,7 +58,6 @@ const options = { }, }; -// let nextConfig = withSass(options); nextConfig = withCSS(nextConfig); nextConfig = withMDX(nextConfig); diff --git a/package.json b/package.json index 45cc0f08e..d44afd8ba 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "main": "index.js", "license": "BSD-4-Clause", "scripts": { - "dev": "next", + "dev": "NODE_ENV=dev next", "html": "./scripts/build.sh", "serve:out": "serve out", "sitemap": "node scripts/sitemap.js", @@ -28,7 +28,6 @@ "bootstrap": "^4.3.1", "classnames": "^2.2.6", "date-fns": "^2.6.0", - "dotenv": "^8.2.0", "font-awesome": "^4.7.0", "next": "^9.0.4", "node-sass": "^4.12.0", diff --git a/scripts/build.sh b/scripts/build.sh index 12d210093..622e739dd 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -8,7 +8,7 @@ if [ ! -f "$ENV_FILE" ]; then exit 1 fi -next build +NODE_ENV=prod next build next export echo 'roadmap.sh' > out/CNAME touch out/.nojekyll diff --git a/scripts/path-map.js b/scripts/path-map.js index 53894671a..db13767d3 100644 --- a/scripts/path-map.js +++ b/scripts/path-map.js @@ -80,8 +80,19 @@ const getRoadmapRoutes = () => { }, {}); }; +/** + * Generates the path-map understood by next.js + * @returns {{}} + */ +const getPathMap = () => () => ({ + ...getPageRoutes(), + ...getGuideRoutes(), + ...getRoadmapRoutes(), +}); + module.exports = { getPageRoutes, getGuideRoutes, getRoadmapRoutes, + getPathMap, };