From e1b7171bb1d22a338724fc4081100db41aff1dd8 Mon Sep 17 00:00:00 2001 From: Joshua Chen Date: Mon, 2 May 2022 16:34:30 +0800 Subject: [PATCH] fix(core): allow empty static directories (#7285) * fix(core): allow empty static directories * improve comment * add empty directory --- packages/docusaurus/src/commands/build.ts | 31 ++++++++++++++++++----- website/docusaurus.config.js | 3 +++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/packages/docusaurus/src/commands/build.ts b/packages/docusaurus/src/commands/build.ts index 69a35f758b..72d6130828 100644 --- a/packages/docusaurus/src/commands/build.ts +++ b/packages/docusaurus/src/commands/build.ts @@ -124,7 +124,11 @@ async function buildLocale({ outDir, generatedFilesDir, plugins, - siteConfig: {baseUrl, onBrokenLinks, staticDirectories}, + siteConfig: { + baseUrl, + onBrokenLinks, + staticDirectories: staticDirectoriesOption, + }, routes, } = props; @@ -162,15 +166,30 @@ async function buildLocale({ }, }); - if (staticDirectories.length > 0) { - await Promise.all(staticDirectories.map((dir) => fs.ensureDir(dir))); + // The staticDirectories option can contain empty directories, or non-existent + // directories (e.g. user deleted `static`). Instead of issuing an error, we + // just silently filter them out, because user could have never configured it + // in the first place (the default option should always "work"). + const staticDirectories = ( + await Promise.all( + staticDirectoriesOption.map(async (dir) => { + const staticDir = path.resolve(siteDir, dir); + if ( + (await fs.pathExists(staticDir)) && + (await fs.readdir(staticDir)).length > 0 + ) { + return staticDir; + } + return ''; + }), + ) + ).filter(Boolean); + if (staticDirectories.length > 0) { serverConfig = merge(serverConfig, { plugins: [ new CopyWebpackPlugin({ - patterns: staticDirectories - .map((dir) => path.resolve(siteDir, dir)) - .map((dir) => ({from: dir, to: outDir})), + patterns: staticDirectories.map((dir) => ({from: dir, to: outDir})), }), ], }); diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 54fbf4d0af..022a36ae3c 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -120,6 +120,9 @@ const config = { staticDirectories: [ 'static', path.join(__dirname, '_dogfooding/_asset-tests'), + // Adding a non-existent static directory. If user deleted `static` without + // specifying `staticDirectories: []`, build should still work + path.join(__dirname, '_dogfooding/non-existent'), ], themes: ['live-codeblock', ...dogfoodingThemeInstances], plugins: [