From d08fac0b1c76b2c9b6b0a73f359615d3acfef934 Mon Sep 17 00:00:00 2001 From: igor-dv Date: Sun, 19 Aug 2018 17:16:17 +0300 Subject: [PATCH] Build "entries" with presets and inject them to the presets.extendWebpack --- lib/core/src/server/config.js | 17 ++++++++++------- lib/core/src/server/config/entries.js | 14 ++++++++------ lib/core/src/server/config/webpack.config.js | 13 ++----------- .../src/server/config/webpack.config.prod.js | 5 +---- lib/core/src/server/core-preset-dev.js | 14 ++++++++++++++ lib/core/src/server/core-preset-prod.js | 11 +++++++++++ 6 files changed, 46 insertions(+), 28 deletions(-) diff --git a/lib/core/src/server/config.js b/lib/core/src/server/config.js index 955e12dc2b1..9beb8e858dd 100644 --- a/lib/core/src/server/config.js +++ b/lib/core/src/server/config.js @@ -8,14 +8,17 @@ function customPreset({ configDir }) { return serverRequire(path.resolve(configDir, 'presets')) || []; } -function getBabelConfig(options, presets) { - const { configDir, wrapDefaultBabelConfig = noopWrapper } = options; - return presets.extendBabel({}, { configDir, wrapDefaultBabelConfig }); -} - function getWebpackConfig(options, presets) { - const babelOptions = getBabelConfig(options, presets); - return presets.extendWebpack({}, { ...options, babelOptions, presets }); + const { configDir, wrapDefaultBabelConfig = noopWrapper } = options; + + const babelOptions = presets.extendBabel({}, { configDir, wrapDefaultBabelConfig }); + + const entries = { + iframe: presets.extendPreview([], options), + manager: presets.extendManager([], options), + }; + + return presets.extendWebpack({}, { ...options, babelOptions, entries }); } export default options => { diff --git a/lib/core/src/server/config/entries.js b/lib/core/src/server/config/entries.js index 9faca130b34..f0c461c846a 100644 --- a/lib/core/src/server/config/entries.js +++ b/lib/core/src/server/config/entries.js @@ -2,9 +2,8 @@ import path from 'path'; import { logger } from '@storybook/node-logger'; import { getInterpretedFile } from './interpret-files'; -export default function getEntries(configDir, presets) { +export function createPreviewEntry({ configDir }) { const iframe = [require.resolve('./polyfills'), require.resolve('./globals')]; - const manager = [require.resolve('./polyfills'), require.resolve('../../client/manager')]; // Check whether a config.{ext} file exists inside the storybook // config directory and throw an error if it's not. @@ -15,6 +14,12 @@ export default function getEntries(configDir, presets) { iframe.push(require.resolve(storybookConfigPath)); + return iframe; +} + +export function createManagerEntry({ configDir }) { + const manager = [require.resolve('./polyfills'), require.resolve('../../client/manager')]; + // Check whether addons.{ext} file exists inside the storybook. const storybookCustomAddonsPath = getInterpretedFile(path.resolve(configDir, 'addons')); if (storybookCustomAddonsPath) { @@ -22,8 +27,5 @@ export default function getEntries(configDir, presets) { manager.unshift(storybookCustomAddonsPath); } - return { - iframe: presets.extendPreview(iframe), - manager: presets.extendManager(manager), - }; + return manager; } diff --git a/lib/core/src/server/config/webpack.config.js b/lib/core/src/server/config/webpack.config.js index 0f19f9f61d1..9ac685f39c3 100644 --- a/lib/core/src/server/config/webpack.config.js +++ b/lib/core/src/server/config/webpack.config.js @@ -5,14 +5,11 @@ import Dotenv from 'dotenv-webpack'; import WatchMissingNodeModulesPlugin from 'react-dev-utils/WatchMissingNodeModulesPlugin'; import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin'; import GeneratePagePlugin from 'generate-page-webpack-plugin'; -import getEntries from './entries'; import { includePaths, excludePaths, nodeModulesPaths, loadEnv, nodePaths } from './utils'; import { getPreviewHeadHtml, getManagerHeadHtml, getPreviewBodyHtml } from '../utils'; import { version } from '../../../package.json'; -export default ({ configDir, quiet, babelOptions, presets }) => { - const entries = getEntries(configDir, presets); - +export default ({ configDir, quiet, babelOptions, entries }) => { const entriesMeta = { iframe: { headHtmlSnippet: getPreviewHeadHtml(configDir, process.env), @@ -26,13 +23,7 @@ export default ({ configDir, quiet, babelOptions, presets }) => { return { mode: 'development', devtool: 'cheap-module-source-map', - entry: { - ...entries, - iframe: [ - ...entries.iframe, - `${require.resolve('webpack-hot-middleware/client')}?reload=true`, - ], - }, + entry: entries, output: { path: path.join(__dirname, 'dist'), filename: 'static/[name].bundle.js', diff --git a/lib/core/src/server/config/webpack.config.prod.js b/lib/core/src/server/config/webpack.config.prod.js index 3ef01c40039..8edd6a072eb 100644 --- a/lib/core/src/server/config/webpack.config.prod.js +++ b/lib/core/src/server/config/webpack.config.prod.js @@ -2,14 +2,11 @@ import webpack from 'webpack'; import { getEnvironment } from 'universal-dotenv'; import Dotenv from 'dotenv-webpack'; import GeneratePagePlugin from 'generate-page-webpack-plugin'; -import getEntries from './entries'; import { version } from '../../../package.json'; import { includePaths, excludePaths, loadEnv, nodePaths } from './utils'; import { getPreviewHeadHtml, getManagerHeadHtml, getPreviewBodyHtml } from '../utils'; -export default ({ configDir, babelOptions, presets }) => { - const entries = getEntries(configDir, presets); - +export default ({ configDir, babelOptions, entries }) => { const entriesMeta = { iframe: { headHtmlSnippet: getPreviewHeadHtml(configDir, process.env), diff --git a/lib/core/src/server/core-preset-dev.js b/lib/core/src/server/core-preset-dev.js index ed5f2dd8b7c..46907c9cdf0 100644 --- a/lib/core/src/server/core-preset-dev.js +++ b/lib/core/src/server/core-preset-dev.js @@ -1,6 +1,7 @@ import loadCustomBabelConfig from './loadCustomBabelConfig'; import createDevConfig from './config/webpack.config'; import defaultBabelConfig from './config/babel'; +import { createManagerEntry, createPreviewEntry } from './config/entries'; function extendWebpack(_, options) { return createDevConfig(options); @@ -10,7 +11,20 @@ function extendBabel(_, { configDir, wrapDefaultBabelConfig }) { return loadCustomBabelConfig(configDir) || wrapDefaultBabelConfig(defaultBabelConfig); } +function extendManager(_, options) { + return createManagerEntry(options); +} + +function extendPreview(_, options) { + return [ + ...createPreviewEntry(options), + `${require.resolve('webpack-hot-middleware/client')}?reload=true`, + ]; +} + export default { extendWebpack, extendBabel, + extendManager, + extendPreview, }; diff --git a/lib/core/src/server/core-preset-prod.js b/lib/core/src/server/core-preset-prod.js index 29f40f0129b..afcfcfa11aa 100644 --- a/lib/core/src/server/core-preset-prod.js +++ b/lib/core/src/server/core-preset-prod.js @@ -1,6 +1,7 @@ import loadCustomBabelConfig from './loadCustomBabelConfig'; import createProdConfig from './config/webpack.config.prod'; import defaultBabelConfig from './config/babel.prod'; +import { createManagerEntry, createPreviewEntry } from './config/entries'; function extendWebpack(_, options) { return createProdConfig(options); @@ -10,7 +11,17 @@ function extendBabel(_, { configDir, wrapDefaultBabelConfig }) { return loadCustomBabelConfig(configDir) || wrapDefaultBabelConfig(defaultBabelConfig); } +function extendManager(_, options) { + return createManagerEntry(options); +} + +function extendPreview(_, options) { + return createPreviewEntry(options); +} + export default { extendWebpack, extendBabel, + extendManager, + extendPreview, };