diff --git a/packages/create-gatsby/src/index.ts b/packages/create-gatsby/src/index.ts index 5f4f45d347ca2..57b8d8b806925 100644 --- a/packages/create-gatsby/src/index.ts +++ b/packages/create-gatsby/src/index.ts @@ -169,11 +169,12 @@ ${center(c.blueBright.bold.underline(`Welcome to Gatsby!`))} cmses[data.cms].message )}` ) - plugins.push(data.cms) + const extraPlugins = cmses[data.cms].plugins || [] + plugins.push(data.cms, ...extraPlugins) packages.push( data.cms, ...(cmses[data.cms].dependencies || []), - ...(cmses[data.cms].plugins || []) + ...extraPlugins ) pluginConfig = { ...pluginConfig, ...cmses[data.cms].options } } @@ -184,11 +185,13 @@ ${center(c.blueBright.bold.underline(`Welcome to Gatsby!`))} styles[data.styling].message )} for styling your site` ) - plugins.push(data.styling) + const extraPlugins = styles[data.styling].plugins || [] + + plugins.push(data.styling, ...extraPlugins) packages.push( data.styling, ...(styles[data.styling].dependencies || []), - ...(styles[data.styling].plugins || []) + ...extraPlugins ) pluginConfig = { ...pluginConfig, ...styles[data.styling].options } } @@ -200,12 +203,16 @@ ${center(c.blueBright.bold.underline(`Welcome to Gatsby!`))} .join(`, `)}` ) plugins.push(...data.features) - const featureDependencies = data.features?.map(featureKey => [ - // Spread in extra dependencies - ...(features[featureKey].dependencies || []), - // Spread in plugins, stripping the optional key - ...(features[featureKey].plugins || []), - ]) + const featureDependencies = data.features?.map(featureKey => { + const extraPlugins = features[featureKey].plugins || [] + plugins.push(...extraPlugins) + return [ + // Spread in extra dependencies + ...(features[featureKey].dependencies || []), + // Spread in plugins, stripping the optional key + ...extraPlugins, + ] + }) const flattenedDependencies = ([] as Array).concat.apply( [], featureDependencies @@ -249,10 +256,10 @@ ${c.bold(`Thanks! Here's what we'll now do:`)} return } - await initStarter(DEFAULT_STARTER, data.project, packages) + await initStarter(DEFAULT_STARTER, data.project, packages.map(removeKey)) console.log(c.green(`✔ `) + `Created site in ` + c.green(data.project)) - + console.log({ plugins, pluginConfig }) if (plugins.length) { console.log(c.bold(`🔌 Installing plugins...`)) await installPlugins(plugins, pluginConfig, path.resolve(data.project), []) diff --git a/packages/create-gatsby/src/plugin-options-form.ts b/packages/create-gatsby/src/plugin-options-form.ts index 8e2e12d90c4bb..5081e51ce51a2 100644 --- a/packages/create-gatsby/src/plugin-options-form.ts +++ b/packages/create-gatsby/src/plugin-options-form.ts @@ -56,7 +56,7 @@ export const makePluginConfigQuestions = ( selectedPlugins.forEach((pluginName: string): void => { const schema = pluginSchemas[pluginName as PluginName] - if (typeof schema === `string` || !(`keys` in schema)) { + if (!schema || typeof schema === `string` || !(`keys` in schema)) { return } const options: Record | undefined = schema?.keys diff --git a/packages/gatsby-cli/src/plugin-add.ts b/packages/gatsby-cli/src/plugin-add.ts index 925fea2be4dcd..6cb935c764fe2 100644 --- a/packages/gatsby-cli/src/plugin-add.ts +++ b/packages/gatsby-cli/src/plugin-add.ts @@ -37,19 +37,19 @@ async function installPluginConfig( options: Record | undefined, root: string ): Promise { - const installTimer = reporter.activityTimer( - `Adding ${plugin} to gatsby-config` - ) - // Plugins can optionally include a key, to allow duplicates const [pluginName, pluginKey] = plugin.split(`:`) + const installTimer = reporter.activityTimer( + `Adding ${pluginName} to gatsby-config` + ) + installTimer.start() reporter.info(`Adding ${pluginName}`) try { const result = await GatsbyPlugin.create( { root }, - { name: plugin, options, key: pluginKey } + { name: pluginName, options, key: pluginKey } ) reporter.info(result._message) } catch (err) {