mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-11 08:07:26 +02:00
feat: pass loaded siteConfig as props for React component
This commit is contained in:
parent
c0194a1f53
commit
11b0d15238
5 changed files with 21 additions and 10 deletions
|
@ -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'],
|
||||||
{
|
{
|
||||||
|
|
|
@ -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});
|
||||||
|
|
|
@ -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`
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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');
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue