feat: pass loaded siteConfig as props for React component

This commit is contained in:
endiliey 2018-09-14 23:49:03 +08:00
parent c0194a1f53
commit 11b0d15238
5 changed files with 21 additions and 10 deletions

View file

@ -39,7 +39,7 @@ module.exports = async function start(siteDir, cliOptions = {}) {
console.error(chalk.red(err.stack)); console.error(chalk.red(err.stack));
}); });
}; };
const docsRelativeDir = props.siteConfig.customDocsPath || 'docs'; const docsRelativeDir = props.siteConfig.customDocsPath;
const fsWatcher = chokidar.watch( const fsWatcher = chokidar.watch(
[`../${docsRelativeDir}/**/*.md`, 'blog/**/*.md', 'siteConfig.js'], [`../${docsRelativeDir}/**/*.md`, 'blog/**/*.md', 'siteConfig.js'],
{ {

View file

@ -3,7 +3,7 @@ import {renderRoutes} from 'react-router-config';
import routes from '@generated/routes'; // eslint-disable-line import routes from '@generated/routes'; // eslint-disable-line
import docsMetadata from '@generated/docsMetadata'; // eslint-disable-line import docsMetadata from '@generated/docsMetadata'; // eslint-disable-line
import pagesMetadata from '@generated/pagesMetadata'; // eslint-disable-line import pagesMetadata from '@generated/pagesMetadata'; // eslint-disable-line
import siteConfig from '@site/siteConfig'; //eslint-disable-line import siteConfig from '@generated/siteConfig'; //eslint-disable-line
export default () => export default () =>
renderRoutes(routes, {docsMetadata, pagesMetadata, siteConfig}); renderRoutes(routes, {docsMetadata, pagesMetadata, siteConfig});

View file

@ -35,6 +35,17 @@ module.exports = function loadConfig(siteDir, deleteCache = true) {
); );
} }
/* Fill default value */
const defaultConfig = {
customDocsPath: 'docs',
docsUrl: 'docs'
};
Object.keys(defaultConfig).forEach(field => {
if (!config[field]) {
config[field] = defaultConfig[field];
}
});
/* /*
User's own array of custom fields, User's own array of custom fields,
e.g: if they want to include some field so they can access it later from `props.siteConfig` e.g: if they want to include some field so they can access it later from `props.siteConfig`

View file

@ -118,7 +118,7 @@ module.exports = async function processMetadata(
} }
/* Build the permalink */ /* Build the permalink */
const {baseUrl, docsUrl = 'docs'} = siteConfig; const {baseUrl, docsUrl} = siteConfig;
/* /*
if user has own custom permalink defined in frontmatter if user has own custom permalink defined in frontmatter

View file

@ -10,23 +10,23 @@ const genRoutesConfig = require('./routes');
module.exports = async function load(siteDir) { module.exports = async function load(siteDir) {
// @tested - siteConfig // @tested - siteConfig
const siteConfig = loadConfig(siteDir); const siteConfig = loadConfig(siteDir);
await generate(
'siteConfig.js',
`export default ${JSON.stringify(siteConfig, null, 2)};`
);
// @tested - env // @tested - env
const env = loadEnv({siteDir, siteConfig}); const env = loadEnv({siteDir, siteConfig});
// docs // docs
const docsDir = path.resolve( const docsDir = path.resolve(siteDir, '..', siteConfig.customDocsPath);
siteDir,
'..',
siteConfig.customDocsPath || 'docs'
);
const docsMetadata = await loadDocs({siteDir, docsDir, env, siteConfig}); const docsMetadata = await loadDocs({siteDir, docsDir, env, siteConfig});
await generate( await generate(
'docsMetadata.js', 'docsMetadata.js',
`export default ${JSON.stringify(docsMetadata, null, 2)};` `export default ${JSON.stringify(docsMetadata, null, 2)};`
); );
/* Create source to permalink mapping */ /* Create source to metadata mapping */
const sourceToMetadata = {}; const sourceToMetadata = {};
Object.values(docsMetadata).forEach( Object.values(docsMetadata).forEach(
({source, version, permalink, language}) => { ({source, version, permalink, language}) => {
@ -52,7 +52,7 @@ module.exports = async function load(siteDir) {
// resolve the theme // resolve the theme
const themePath = loadTheme(siteDir); const themePath = loadTheme(siteDir);
const baseUrl = siteConfig.baseUrl || '/'; const {baseUrl} = siteConfig;
const versionedDir = path.join(siteDir, 'versioned_docs'); const versionedDir = path.join(siteDir, 'versioned_docs');
const translatedDir = path.join(siteDir, 'translated_docs'); const translatedDir = path.join(siteDir, 'translated_docs');