UNPKG

@storybook/cli

Version:

Storybook's CLI - easiest method of adding storybook to your projects

156 lines (122 loc) 4.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.webpack5 = void 0; require("core-js/modules/es.promise.js"); var _chalk = _interopRequireDefault(require("chalk")); var _tsDedent = _interopRequireDefault(require("ts-dedent")); var _semver = _interopRequireDefault(require("@storybook/semver")); var _csfTools = require("@storybook/csf-tools"); var _getStorybookInfo = require("../helpers/getStorybookInfo"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const logger = console; /** * Is the user using webpack5 in their project? * * If the user is using a version of SB >= 6.3, * prompt them to upgrade to webpack5. * * - Add manager-webpack5 builder-webpack5 as dev dependencies * - Add core.builder = 'webpack5' to main.js * - Add 'webpack5' as a project dependency */ const webpack5 = { id: 'webpack5', async checkWebpack5Builder(packageJson) { var _semver$coerce; const { mainConfig, version: storybookVersion } = (0, _getStorybookInfo.getStorybookInfo)(packageJson); const storybookCoerced = storybookVersion && ((_semver$coerce = _semver.default.coerce(storybookVersion)) === null || _semver$coerce === void 0 ? void 0 : _semver$coerce.version); if (!storybookCoerced) { logger.warn((0, _tsDedent.default)` ❌ Unable to determine storybook version, skipping ${_chalk.default.cyan('webpack5')} fix. 🤔 Are you running automigrate from your project directory? `); return null; } if (_semver.default.lt(storybookCoerced, '6.3.0')) { logger.warn((0, _tsDedent.default)` Detected SB 6.3 or below, please upgrade storybook to use webpack5. To upgrade to the latest stable release, run this from your project directory: ${_chalk.default.cyan('npx sb upgrade')} Add the ${_chalk.default.cyan('--prerelease')} flag to get the latest prerelease. `.trim()); return null; } if (_semver.default.gte(storybookCoerced, '7.0.0')) { return null; } if (!mainConfig) { logger.warn('Unable to find storybook main.js config'); return null; } const main = await (0, _csfTools.readConfig)(mainConfig); const builder = main.getFieldValue(['core', 'builder']); if (builder && builder !== 'webpack4') { logger.info(`Found builder ${builder}, skipping`); return null; } return { storybookVersion, main }; }, async check({ packageManager }) { var _semver$coerce2; const packageJson = packageManager.retrievePackageJson(); const { dependencies, devDependencies } = packageJson; const webpackVersion = dependencies.webpack || devDependencies.webpack; const webpackCoerced = (_semver$coerce2 = _semver.default.coerce(webpackVersion)) === null || _semver$coerce2 === void 0 ? void 0 : _semver$coerce2.version; if (!webpackCoerced || _semver.default.lt(webpackCoerced, '5.0.0') || _semver.default.gte(webpackCoerced, '6.0.0')) return null; const builderInfo = await this.checkWebpack5Builder(packageJson); return builderInfo ? Object.assign({ webpackVersion }, builderInfo) : null; }, prompt({ webpackVersion, storybookVersion }) { const webpackFormatted = _chalk.default.cyan(`webpack ${webpackVersion}`); const sbFormatted = _chalk.default.cyan(`Storybook ${storybookVersion}`); return (0, _tsDedent.default)` We've detected you're running ${webpackFormatted}. ${sbFormatted} runs webpack4 by default, which may not be compatible. To run Storybook in webpack5-mode, we can install Storybook's ${_chalk.default.cyan('webpack5 builder')} for you. More info: ${_chalk.default.yellow('https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#webpack-5-manager-build')} `; }, async run({ result: { main, storybookVersion, webpackVersion }, packageManager, dryRun }) { const deps = [`@storybook/manager-webpack5@${storybookVersion}`, `@storybook/builder-webpack5@${storybookVersion}`]; // this also gets called by 'cra5' fix so we need to add // webpack5 at the project root so that it gets hoisted if (!webpackVersion) { deps.push('webpack@5'); } logger.info(`✅ Adding dependencies: ${deps}`); if (!dryRun) packageManager.addDependencies({ installAsDevDependencies: true }, deps); logger.info('✅ Setting `core.builder` to `webpack5` in main.js'); if (!dryRun) { main.setFieldValue(['core', 'builder'], 'webpack5'); await (0, _csfTools.writeConfig)(main); } } }; exports.webpack5 = webpack5;