From 9d67ddc554f3e8fb3be8cce3c6c465d5610b28c3 Mon Sep 17 00:00:00 2001 From: slorber Date: Tue, 2 Mar 2021 16:07:57 +0100 Subject: [PATCH] revert --generated-files-dir option + some refactors --- packages/docusaurus-types/src/index.d.ts | 14 ++------ packages/docusaurus/bin/docusaurus.js | 34 +++++-------------- packages/docusaurus/src/commands/build.ts | 2 -- packages/docusaurus/src/commands/clear.ts | 4 +-- packages/docusaurus/src/commands/deploy.ts | 7 ++-- packages/docusaurus/src/commands/serve.ts | 1 - packages/docusaurus/src/commands/start.ts | 4 +-- packages/docusaurus/src/constants.ts | 16 ++++++--- .../docusaurus/src/server/configValidation.ts | 4 +-- packages/docusaurus/src/server/index.ts | 33 +++++++++--------- .../docusaurus/src/server/plugins/init.ts | 5 ++- .../server/presets/__tests__/index.test.ts | 16 ++++----- .../docusaurus/src/server/presets/index.ts | 4 +-- website/docs/cli.md | 2 -- 14 files changed, 60 insertions(+), 86 deletions(-) diff --git a/packages/docusaurus-types/src/index.d.ts b/packages/docusaurus-types/src/index.d.ts index 259f1c7952db..b1f3a424342e 100644 --- a/packages/docusaurus-types/src/index.d.ts +++ b/packages/docusaurus-types/src/index.d.ts @@ -146,21 +146,12 @@ export type StartCLIOptions = HostPortCLIOptions & export type ServeCLIOptions = HostPortCLIOptions & ConfigOptions & { dir: string; - } & ( - | { - build: true; - // We only need generatedFilesDir when `build` is true - generatedFilesDir: string; - } - | { - build: false; - } - ); + build: boolean; + }; export type BuildOptions = ConfigOptions & { bundleAnalyzer: boolean; outDir: string; - generatedFilesDir: string; minify: boolean; skipBuild: boolean; }; @@ -173,6 +164,7 @@ export interface LoadContext { siteDir: string; generatedFilesDir: string; siteConfig: DocusaurusConfig; + siteConfigPath: string; outDir: string; baseUrl: string; i18n: I18n; diff --git a/packages/docusaurus/bin/docusaurus.js b/packages/docusaurus/bin/docusaurus.js index f000bf50f65c..d77327de6e86 100755 --- a/packages/docusaurus/bin/docusaurus.js +++ b/packages/docusaurus/bin/docusaurus.js @@ -113,10 +113,6 @@ cli '--config ', 'Path to docusaurus config file, default to `[siteDir]/docusaurus.config.js`', ) - .option( - '--generated-files-dir ', - 'Path to temporary `.docusaurus` folder, default to `[siteDir]/.docusaurus`.', - ) .option( '-l, --locale ', 'Build the site in a specified locale. Build all known locales otherwise.', @@ -125,21 +121,15 @@ cli '--no-minify', 'Build website without minimizing JS bundles (default: false)', ) - .action( - ( - siteDir = '.', - {bundleAnalyzer, config, generatedFilesDir, outDir, locale, minify}, - ) => { - wrapCommand(build)(path.resolve(siteDir), { - bundleAnalyzer, - outDir, - config, - generatedFilesDir, - locale, - minify, - }); - }, - ); + .action((siteDir = '.', {bundleAnalyzer, config, outDir, locale, minify}) => { + wrapCommand(build)(path.resolve(siteDir), { + bundleAnalyzer, + outDir, + config, + locale, + minify, + }); + }); cli .command('swizzle [themeName] [componentName] [siteDir]') @@ -230,10 +220,6 @@ cli '--config ', 'Path to docusaurus config file, default to `[siteDir]/docusaurus.config.js`', ) - .option( - '--generated-files-dir ', - 'Path to temporary `.docusaurus` folder, default to `[siteDir]/.docusaurus`. This is only relevant when `--build` passed in.', - ) .option('-p, --port ', 'use specified port (default: 3000)') .option('--build', 'Build website before serving (default: false)') .option('-h, --host ', 'use specified host (default: localhost') @@ -246,7 +232,6 @@ cli host = 'localhost', build: buildSite = false, config, - generatedFilesDir, }, ) => { wrapCommand(serve)(path.resolve(siteDir), { @@ -254,7 +239,6 @@ cli port, build: buildSite, config, - generatedFilesDir, host, }); }, diff --git a/packages/docusaurus/src/commands/build.ts b/packages/docusaurus/src/commands/build.ts index 380b4a0cf88c..1e28ab4d995f 100644 --- a/packages/docusaurus/src/commands/build.ts +++ b/packages/docusaurus/src/commands/build.ts @@ -60,7 +60,6 @@ export default async function build( } const context = await loadContext(siteDir, { customOutDir: cliOptions.outDir, - customGeneratedFilesDir: cliOptions.generatedFilesDir, customConfigFilePath: cliOptions.config, locale: cliOptions.locale, localizePath: cliOptions.locale ? false : undefined, @@ -118,7 +117,6 @@ async function buildLocale({ const props: Props = await load(siteDir, { customOutDir: cliOptions.outDir, customConfigFilePath: cliOptions.config, - customGeneratedFilesDir: cliOptions.generatedFilesDir, locale, localizePath: cliOptions.locale ? false : undefined, }); diff --git a/packages/docusaurus/src/commands/clear.ts b/packages/docusaurus/src/commands/clear.ts index c221e86f9ea7..84634f3031fe 100644 --- a/packages/docusaurus/src/commands/clear.ts +++ b/packages/docusaurus/src/commands/clear.ts @@ -7,7 +7,7 @@ import fs from 'fs-extra'; import path from 'path'; import chalk = require('chalk'); -import {BUILD_DIR_NAME, GENERATED_FILES_DIR_NAME} from '../constants'; +import {DEFAULT_BUILD_DIR_NAME, GENERATED_FILES_DIR_NAME} from '../constants'; function removePath(fsPath: string) { return fs @@ -24,7 +24,7 @@ function removePath(fsPath: string) { export default async function clear(siteDir: string): Promise { return Promise.all([ removePath(path.join(siteDir, GENERATED_FILES_DIR_NAME)), - removePath(path.join(siteDir, BUILD_DIR_NAME)), + removePath(path.join(siteDir, DEFAULT_BUILD_DIR_NAME)), removePath(path.join(siteDir, 'node_modules/.cache/cache-loader')), ]); } diff --git a/packages/docusaurus/src/commands/deploy.ts b/packages/docusaurus/src/commands/deploy.ts index 773f5751c0f2..748f268cd959 100644 --- a/packages/docusaurus/src/commands/deploy.ts +++ b/packages/docusaurus/src/commands/deploy.ts @@ -8,7 +8,6 @@ import fs from 'fs-extra'; import shell from 'shelljs'; import chalk from 'chalk'; -import {CONFIG_FILE_NAME} from '../constants'; import {loadContext} from '../server'; import build from './build'; import {BuildCLIOptions} from '@docusaurus/types'; @@ -42,7 +41,7 @@ export default async function deploy( siteDir: string, cliOptions: Partial = {}, ): Promise { - const {outDir, siteConfig} = await loadContext(siteDir, { + const {outDir, siteConfig, siteConfigPath} = await loadContext(siteDir, { customConfigFilePath: cliOptions.config, customOutDir: cliOptions.outDir, }); @@ -68,7 +67,7 @@ export default async function deploy( siteConfig.organizationName; if (!organizationName) { throw new Error( - `Missing project organization name. Did you forget to define 'organizationName' in ${CONFIG_FILE_NAME}? You may also export it via the ORGANIZATION_NAME environment variable.`, + `Missing project organization name. Did you forget to define 'organizationName' in ${siteConfigPath}? You may also export it via the ORGANIZATION_NAME environment variable.`, ); } console.log(`${chalk.cyan('organizationName:')} ${organizationName}`); @@ -79,7 +78,7 @@ export default async function deploy( siteConfig.projectName; if (!projectName) { throw new Error( - `Missing project name. Did you forget to define 'projectName' in ${CONFIG_FILE_NAME}? You may also export it via the PROJECT_NAME environment variable.`, + `Missing project name. Did you forget to define 'projectName' in ${siteConfigPath}? You may also export it via the PROJECT_NAME environment variable.`, ); } console.log(`${chalk.cyan('projectName:')} ${projectName}`); diff --git a/packages/docusaurus/src/commands/serve.ts b/packages/docusaurus/src/commands/serve.ts index 925b5e7ea561..09184389e530 100644 --- a/packages/docusaurus/src/commands/serve.ts +++ b/packages/docusaurus/src/commands/serve.ts @@ -26,7 +26,6 @@ export default async function serve( dir = await build( siteDir, { - generatedFilesDir: cliOptions.generatedFilesDir, config: cliOptions.config, outDir: dir, }, diff --git a/packages/docusaurus/src/commands/start.ts b/packages/docusaurus/src/commands/start.ts index 1751d635407d..b50ba7a346ee 100644 --- a/packages/docusaurus/src/commands/start.ts +++ b/packages/docusaurus/src/commands/start.ts @@ -22,7 +22,7 @@ import merge from 'webpack-merge'; import HotModuleReplacementPlugin from 'webpack/lib/HotModuleReplacementPlugin'; import {load} from '../server'; import {StartCLIOptions} from '@docusaurus/types'; -import {CONFIG_FILE_NAME, STATIC_DIR_NAME} from '../constants'; +import {STATIC_DIR_NAME} from '../constants'; import createClientConfig from '../webpack/client'; import { applyConfigureWebpack, @@ -98,7 +98,7 @@ export default async function start( const pathsToWatch: string[] = [ ...pluginPaths, - CONFIG_FILE_NAME, + props.siteConfigPath, getTranslationsLocaleDirPath({ siteDir, locale: props.i18n.currentLocale, diff --git a/packages/docusaurus/src/constants.ts b/packages/docusaurus/src/constants.ts index 765dbae40eac..924afaa67090 100644 --- a/packages/docusaurus/src/constants.ts +++ b/packages/docusaurus/src/constants.ts @@ -5,10 +5,18 @@ * LICENSE file in the root directory of this source tree. */ -export const BABEL_CONFIG_FILE_NAME = 'babel.config.js'; -export const BUILD_DIR_NAME = 'build'; -export const CONFIG_FILE_NAME = 'docusaurus.config.js'; -export const GENERATED_FILES_DIR_NAME = '.docusaurus'; +// Can be overridden with cli option --out-dir +export const DEFAULT_BUILD_DIR_NAME = 'build'; + +// Can be overridden with cli option --config +export const DEFAULT_CONFIG_FILE_NAME = 'docusaurus.config.js'; + +export const BABEL_CONFIG_FILE_NAME = + process.env.DOCUSAURUS_BABEL_CONFIG_FILE_NAME || 'babel.config.js'; + +export const GENERATED_FILES_DIR_NAME = + process.env.DOCUSAURUS_GENERATED_FILES_DIR_NAME || '.docusaurus'; + export const SRC_DIR_NAME = 'src'; export const STATIC_DIR_NAME = 'static'; export const OUTPUT_STATIC_ASSETS_DIR_NAME = 'assets'; // files handled by webpack, hashed (can be cached aggressively) diff --git a/packages/docusaurus/src/server/configValidation.ts b/packages/docusaurus/src/server/configValidation.ts index 47bd3c83f5da..137d7eaaaf5f 100644 --- a/packages/docusaurus/src/server/configValidation.ts +++ b/packages/docusaurus/src/server/configValidation.ts @@ -6,7 +6,7 @@ */ import {DocusaurusConfig, I18nConfig} from '@docusaurus/types'; -import {CONFIG_FILE_NAME} from '../constants'; +import {DEFAULT_CONFIG_FILE_NAME} from '../constants'; import Joi from 'joi'; import { logValidationBugReportHint, @@ -164,7 +164,7 @@ export function validateConfig( '', ); formattedError = unknownFields - ? `${formattedError}These field(s) [${unknownFields}] are not recognized in ${CONFIG_FILE_NAME}.\nIf you still want these fields to be in your configuration, put them in the 'customFields' attribute.\nSee https://v2.docusaurus.io/docs/docusaurus.config.js/#customfields` + ? `${formattedError}These field(s) [${unknownFields}] are not recognized in ${DEFAULT_CONFIG_FILE_NAME}.\nIf you still want these fields to be in your configuration, put them in the 'customFields' attribute.\nSee https://v2.docusaurus.io/docs/docusaurus.config.js/#customfields` : formattedError; throw new Error(formattedError); } else { diff --git a/packages/docusaurus/src/server/index.ts b/packages/docusaurus/src/server/index.ts index 29f4f9879540..57ec879a1cdc 100644 --- a/packages/docusaurus/src/server/index.ts +++ b/packages/docusaurus/src/server/index.ts @@ -10,8 +10,8 @@ import path, {join} from 'path'; import chalk from 'chalk'; import ssrDefaultTemplate from '../client/templates/ssr.html.template'; import { - BUILD_DIR_NAME, - CONFIG_FILE_NAME, + DEFAULT_BUILD_DIR_NAME, + DEFAULT_CONFIG_FILE_NAME, GENERATED_FILES_DIR_NAME, THEME_PATH, } from '../constants'; @@ -40,7 +40,6 @@ import {mapValues} from 'lodash'; type LoadContextOptions = { customOutDir?: string; - customGeneratedFilesDir?: string; customConfigFilePath?: string; locale?: string; localizePath?: boolean; // undefined = only non-default locales paths are localized @@ -50,26 +49,23 @@ export async function loadContext( siteDir: string, options: LoadContextOptions = {}, ): Promise { - const { - customOutDir, - locale, - customGeneratedFilesDir, - customConfigFilePath, - } = options; - const generatedFilesDir = customGeneratedFilesDir - ? path.resolve(customGeneratedFilesDir) + const {customOutDir, locale, customConfigFilePath} = options; + const generatedFilesDir = path.isAbsolute(GENERATED_FILES_DIR_NAME) + ? GENERATED_FILES_DIR_NAME : path.resolve(siteDir, GENERATED_FILES_DIR_NAME); - const configPath = customConfigFilePath - ? path.resolve(customConfigFilePath) - : path.resolve(siteDir, CONFIG_FILE_NAME); + const siteConfigPathUnresolved = + customConfigFilePath ?? DEFAULT_CONFIG_FILE_NAME; + const siteConfigPath = path.isAbsolute(siteConfigPathUnresolved) + ? siteConfigPathUnresolved + : path.resolve(siteDir, siteConfigPathUnresolved); - const initialSiteConfig: DocusaurusConfig = loadConfig(configPath); + const initialSiteConfig: DocusaurusConfig = loadConfig(siteConfigPath); const {ssrTemplate} = initialSiteConfig; const baseOutDir = customOutDir ? path.resolve(customOutDir) - : path.resolve(siteDir, BUILD_DIR_NAME); + : path.resolve(siteDir, DEFAULT_BUILD_DIR_NAME); const i18n = await loadI18n(initialSiteConfig, {locale}); @@ -104,6 +100,7 @@ export async function loadContext( siteDir, generatedFilesDir, siteConfig, + siteConfigPath, outDir, baseUrl, i18n, @@ -133,6 +130,7 @@ export async function load( const { generatedFilesDir, siteConfig, + siteConfigPath, outDir, baseUrl, i18n, @@ -160,7 +158,7 @@ export async function load( // We want the generated config to have been normalized by the plugins! const genSiteConfig = generate( generatedFilesDir, - CONFIG_FILE_NAME, + DEFAULT_CONFIG_FILE_NAME, `export default ${JSON.stringify(siteConfig, null, 2)};`, ); @@ -326,6 +324,7 @@ ${Object.keys(registry) const props: Props = { siteConfig, + siteConfigPath, siteDir, outDir, baseUrl, diff --git a/packages/docusaurus/src/server/plugins/init.ts b/packages/docusaurus/src/server/plugins/init.ts index 08966af5389c..7fe92bbfb091 100644 --- a/packages/docusaurus/src/server/plugins/init.ts +++ b/packages/docusaurus/src/server/plugins/init.ts @@ -6,7 +6,6 @@ */ import Module from 'module'; -import {join} from 'path'; import importFresh from 'import-fresh'; import { DocusaurusPluginVersionInformation, @@ -15,7 +14,7 @@ import { PluginConfig, PluginOptions, } from '@docusaurus/types'; -import {CONFIG_FILE_NAME, DEFAULT_PLUGIN_ID} from '../../constants'; +import {DEFAULT_PLUGIN_ID} from '../../constants'; import {getPluginVersion} from '../versions'; import {ensureUniquePluginInstanceIds} from './pluginIds'; import { @@ -40,7 +39,7 @@ export default function initPlugins({ // We need to fallback to createRequireFromPath since createRequire is only available in node v12. // See: https://nodejs.org/api/modules.html#modules_module_createrequire_filename const createRequire = Module.createRequire || Module.createRequireFromPath; - const pluginRequire = createRequire(join(context.siteDir, CONFIG_FILE_NAME)); + const pluginRequire = createRequire(context.siteConfigPath); const plugins: InitPlugin[] = pluginConfigs .map((pluginItem) => { diff --git a/packages/docusaurus/src/server/presets/__tests__/index.test.ts b/packages/docusaurus/src/server/presets/__tests__/index.test.ts index 05c12bcde5ca..a7cdd682e976 100644 --- a/packages/docusaurus/src/server/presets/__tests__/index.test.ts +++ b/packages/docusaurus/src/server/presets/__tests__/index.test.ts @@ -13,7 +13,7 @@ import {LoadContext} from '@docusaurus/types'; describe('loadPresets', () => { test('no presets', () => { const context = { - siteDir: __dirname, + siteConfigPath: __dirname, siteConfig: {}, } as LoadContext; const presets = loadPresets(context); @@ -27,7 +27,7 @@ describe('loadPresets', () => { test('string form', () => { const context = { - siteDir: __dirname, + siteConfigPath: __dirname, siteConfig: { presets: [path.join(__dirname, '__fixtures__/preset-bar.js')], }, @@ -52,7 +52,7 @@ describe('loadPresets', () => { test('string form composite', () => { const context = { - siteDir: __dirname, + siteConfigPath: __dirname, siteConfig: { presets: [ path.join(__dirname, '__fixtures__/preset-bar.js'), @@ -88,7 +88,7 @@ describe('loadPresets', () => { test('array form', () => { const context = { - siteDir: __dirname, + siteConfigPath: __dirname, siteConfig: { presets: [[path.join(__dirname, '__fixtures__/preset-bar.js')]], }, @@ -113,7 +113,7 @@ describe('loadPresets', () => { test('array form with options', () => { const context = { - siteDir: __dirname, + siteConfigPath: __dirname, siteConfig: { presets: [ [ @@ -145,7 +145,7 @@ describe('loadPresets', () => { test('array form composite', () => { const context = { - siteDir: __dirname, + siteConfigPath: __dirname, siteConfig: { presets: [ [ @@ -191,7 +191,7 @@ describe('loadPresets', () => { test('mixed form', () => { const context = { - siteDir: __dirname, + siteConfigPath: __dirname, siteConfig: { presets: [ [ @@ -232,7 +232,7 @@ describe('loadPresets', () => { test('mixed form with themes', () => { const context = { - siteDir: __dirname, + siteConfigPath: __dirname, siteConfig: { presets: [ [ diff --git a/packages/docusaurus/src/server/presets/index.ts b/packages/docusaurus/src/server/presets/index.ts index d1e8797e79e8..f970f6880d65 100644 --- a/packages/docusaurus/src/server/presets/index.ts +++ b/packages/docusaurus/src/server/presets/index.ts @@ -6,9 +6,7 @@ */ import Module from 'module'; -import {join} from 'path'; import importFresh from 'import-fresh'; -import {CONFIG_FILE_NAME} from '../../constants'; import { LoadContext, PluginConfig, @@ -27,7 +25,7 @@ export default function loadPresets( // We need to fallback to createRequireFromPath since createRequire is only available in node v12. // See: https://nodejs.org/api/modules.html#modules_module_createrequire_filename const createRequire = Module.createRequire || Module.createRequireFromPath; - const pluginRequire = createRequire(join(context.siteDir, CONFIG_FILE_NAME)); + const pluginRequire = createRequire(context.siteConfigPath); const presets: PresetConfig[] = (context.siteConfig || {}).presets || []; const unflatPlugins: PluginConfig[][] = []; diff --git a/website/docs/cli.md b/website/docs/cli.md index 6a38b2429b33..1821b53aa069 100644 --- a/website/docs/cli.md +++ b/website/docs/cli.md @@ -78,7 +78,6 @@ Compiles your site for production. | `--bundle-analyzer` | `false` | Analyze your bundle with the [webpack bundle analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer). | | `--out-dir` | `build` | The full path for the new output directory, relative to the current workspace. | | `--config` | `undefined` | Path to docusaurus config file, default to `[siteDir]/docusaurus.config.js` | -| `--generated-files-dir` | `undefined` | Path to temporary `.docusaurus` folder, default to `[siteDir]/.docusaurus` | | `--no-minify` | `false` | Build website without minimizing JS/CSS bundles. | :::info @@ -158,7 +157,6 @@ Serve your built website locally. | `--dir` | `build` | The full path for the output directory, relative to the current workspace | | `--build` | `false` | Build website before serving | | `--config` | `undefined` | Path to docusaurus config file, default to `[siteDir]/docusaurus.config.js` | -| `--generated-files-dir` | `undefined` | Path to temporary `.docusaurus` folder, default to `[siteDir]/.docusaurus`. This is only relevant when `--build` is `true` | | `--host` | `localhost` | Specify a host to use. For example, if you want your server to be accessible externally, you can use `--host 0.0.0.0`. | ### `docusaurus clear [siteDir]`