mirror of
https://github.com/storybookjs/storybook.git
synced 2025-04-08 11:11:53 +08:00
Merge pull request #4155 from storybooks/presets/extend-babel-default
Presets - add babelDefault extension
This commit is contained in:
commit
ad9e74fca9
@ -1,9 +1,6 @@
|
||||
import { mergeBabel } from '@storybook/core/server';
|
||||
|
||||
export function babel(config) {
|
||||
const patch = {
|
||||
plugins: [require.resolve('@babel/plugin-transform-react-jsx')],
|
||||
export function babelDefault(config) {
|
||||
return {
|
||||
...config,
|
||||
plugins: [...config.plugins, require.resolve('@babel/plugin-transform-react-jsx')],
|
||||
};
|
||||
|
||||
return mergeBabel(patch, config);
|
||||
}
|
||||
|
@ -1,9 +1,10 @@
|
||||
import { mergeBabel } from '@storybook/core/server';
|
||||
|
||||
export function babel(config) {
|
||||
const patch = {
|
||||
presets: [require.resolve('@babel/preset-react'), require.resolve('@babel/preset-flow')],
|
||||
export function babelDefault(config) {
|
||||
return {
|
||||
...config,
|
||||
presets: [
|
||||
...config.presets,
|
||||
require.resolve('@babel/preset-react'),
|
||||
require.resolve('@babel/preset-flow'),
|
||||
],
|
||||
};
|
||||
|
||||
return mergeBabel(patch, config);
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import VueLoaderPlugin from 'vue-loader/lib/plugin';
|
||||
import { mergeBabel } from '@storybook/core/server';
|
||||
|
||||
export function webpack(config) {
|
||||
return {
|
||||
@ -27,10 +26,9 @@ export function webpack(config) {
|
||||
};
|
||||
}
|
||||
|
||||
export function babel(config) {
|
||||
const patch = {
|
||||
presets: [require.resolve('babel-preset-vue')],
|
||||
export function babelDefault(config) {
|
||||
return {
|
||||
...config,
|
||||
presets: [...config.presets, require.resolve('babel-preset-vue')],
|
||||
};
|
||||
|
||||
return mergeBabel(patch, config);
|
||||
}
|
||||
|
@ -39,7 +39,6 @@
|
||||
"commander": "^2.17.0",
|
||||
"core-js": "^2.5.7",
|
||||
"css-loader": "^1.0.0",
|
||||
"deepmerge": "^2.1.1",
|
||||
"detect-port": "^1.2.3",
|
||||
"dotenv-webpack": "^1.5.7",
|
||||
"ejs": "^2.6.1",
|
||||
@ -51,7 +50,6 @@
|
||||
"inquirer": "^6.2.0",
|
||||
"interpret": "^1.1.0",
|
||||
"json5": "^2.0.1",
|
||||
"object.omit": "^3.0.0",
|
||||
"opn": "^5.3.0",
|
||||
"postcss-flexbugs-fixes": "^4.1.0",
|
||||
"postcss-loader": "^3.0.0",
|
||||
|
@ -2,8 +2,5 @@ const defaultWebpackConfig = require('./dist/server/config/webpack.config.defaul
|
||||
const serverUtils = require('./dist/server/utils');
|
||||
const buildStatic = require('./dist/server/build-static');
|
||||
const buildDev = require('./dist/server/build-dev');
|
||||
const mergeBabel = require('./dist/server/mergeBabel');
|
||||
|
||||
module.exports = Object.assign({}, defaultWebpackConfig, buildStatic, buildDev, serverUtils, {
|
||||
mergeBabel,
|
||||
});
|
||||
module.exports = Object.assign({}, defaultWebpackConfig, buildStatic, buildDev, serverUtils);
|
||||
|
@ -1,10 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies,global-require */
|
||||
let babelCore = null;
|
||||
|
||||
try {
|
||||
babelCore = require('@babel/core');
|
||||
} catch (e) {
|
||||
babelCore = require('babel-core');
|
||||
}
|
||||
|
||||
module.exports = babelCore;
|
@ -41,5 +41,5 @@ export default options => {
|
||||
|
||||
const presets = loadPresets(presetsConfig);
|
||||
|
||||
return getWebpackConfig(restOptions, presets);
|
||||
return getWebpackConfig({ ...restOptions, presets }, presets);
|
||||
};
|
||||
|
@ -7,8 +7,9 @@ export function webpack(_, options) {
|
||||
return createDevConfig(options);
|
||||
}
|
||||
|
||||
export function babel(_, { configDir }) {
|
||||
return loadCustomBabelConfig(configDir, defaultBabelConfig);
|
||||
export function babel(_, options) {
|
||||
const { configDir, presets } = options;
|
||||
return loadCustomBabelConfig(configDir, () => presets.babelDefault(defaultBabelConfig, options));
|
||||
}
|
||||
|
||||
export function manager(_, options) {
|
||||
|
@ -7,8 +7,9 @@ export function webpack(_, options) {
|
||||
return createProdConfig(options);
|
||||
}
|
||||
|
||||
export function babel(_, { configDir }) {
|
||||
return loadCustomBabelConfig(configDir, defaultBabelConfig);
|
||||
export function babel(_, options) {
|
||||
const { configDir, presets } = options;
|
||||
return loadCustomBabelConfig(configDir, () => presets.babelDefault(defaultBabelConfig, options));
|
||||
}
|
||||
|
||||
export function manager(_, options) {
|
||||
|
@ -53,7 +53,7 @@ function isBabelLoader8() {
|
||||
return satisfies(babelLoaderPkg.version, '>=8.0.0-0');
|
||||
}
|
||||
|
||||
export default function(configDir, defaultConfig) {
|
||||
export default function(configDir, getDefaultConfig) {
|
||||
const babelConfig = loadFromPath(path.resolve(configDir, '.babelrc'));
|
||||
|
||||
if (babelConfig) {
|
||||
@ -65,5 +65,5 @@ export default function(configDir, defaultConfig) {
|
||||
return babelConfig;
|
||||
}
|
||||
|
||||
return isBabelLoader8() ? defaultConfig : {};
|
||||
return isBabelLoader8() ? getDefaultConfig() : {};
|
||||
}
|
||||
|
@ -1,72 +0,0 @@
|
||||
/* eslint-disable no-param-reassign,no-shadow */
|
||||
// https://github.com/neutrinojs/babel-merge
|
||||
// we can't use this package because we need to have babel/core as a peer
|
||||
|
||||
import omit from 'object.omit';
|
||||
import merge from 'deepmerge';
|
||||
import { resolvePlugin, resolvePreset } from './babel-core-proxy';
|
||||
|
||||
function arrayMerge(source = [], overrides = []) {
|
||||
return [...new Set([...source, ...overrides])];
|
||||
}
|
||||
|
||||
function mergeArray(source = [], overrides = [], resolve, deepmergeOpts) {
|
||||
return [...source, ...overrides].reduce((reduction, override) => {
|
||||
const overrideName = resolve(Array.isArray(override) ? override[0] : override);
|
||||
const overrideOptions = Array.isArray(override) ? override[1] || {} : {};
|
||||
|
||||
const base = reduction.find(base => {
|
||||
const baseName = resolve(Array.isArray(base) ? base[0] : base);
|
||||
return baseName === overrideName || baseName.includes(overrideName);
|
||||
});
|
||||
|
||||
const index = reduction.includes(base) ? reduction.indexOf(base) : reduction.length;
|
||||
const baseName = base ? resolve(Array.isArray(base) ? base[0] : base) : overrideName;
|
||||
const baseOptions = Array.isArray(base) ? base[1] : {};
|
||||
const options = merge(baseOptions, overrideOptions, {
|
||||
arrayMerge,
|
||||
isMergeableObject: value => Array.isArray(value),
|
||||
...deepmergeOpts,
|
||||
});
|
||||
|
||||
reduction[index] = Object.keys(options).length ? [baseName, options] : baseName;
|
||||
|
||||
return reduction;
|
||||
}, []);
|
||||
}
|
||||
|
||||
function babelMerge(source = {}, overrides = {}, deepmergeOpts) {
|
||||
const plugins = mergeArray(source.plugins, overrides.plugins, resolvePlugin, deepmergeOpts);
|
||||
const presets = mergeArray(source.presets, overrides.presets, resolvePreset, deepmergeOpts);
|
||||
const sourceEnv = source.env || {};
|
||||
const overridesEnv = overrides.env || {};
|
||||
|
||||
return Object.assign(
|
||||
presets.length ? { presets } : {},
|
||||
plugins.length ? { plugins } : {},
|
||||
merge.all(
|
||||
[
|
||||
omit(source, ['plugins', 'presets', 'env']),
|
||||
omit(overrides, ['plugins', 'presets', 'env']),
|
||||
...[...new Set([...Object.keys(sourceEnv), ...Object.keys(overridesEnv)])].map(name => ({
|
||||
env: {
|
||||
[name]: babelMerge(sourceEnv[name], overridesEnv[name], deepmergeOpts),
|
||||
},
|
||||
})),
|
||||
],
|
||||
{ arrayMerge, ...deepmergeOpts }
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
Object.defineProperty(babelMerge, 'all', {
|
||||
value: (values = [], deepmergeOpts) =>
|
||||
values.reduce((acc, value) => {
|
||||
if (value) {
|
||||
Object.assign(acc, babelMerge(acc, value, deepmergeOpts));
|
||||
}
|
||||
return acc;
|
||||
}, {}),
|
||||
});
|
||||
|
||||
module.exports = babelMerge;
|
@ -67,6 +67,7 @@ function getPresets(presets) {
|
||||
|
||||
return {
|
||||
babel: (config, args) => applyPresets(loadedPresets, config, args, 'babel'),
|
||||
babelDefault: (config, args) => applyPresets(loadedPresets, config, args, 'babelDefault'),
|
||||
webpack: (config, args) => applyPresets(loadedPresets, config, args, 'webpack'),
|
||||
preview: (config, args) => applyPresets(loadedPresets, config, args, 'preview'),
|
||||
manager: (config, args) => applyPresets(loadedPresets, config, args, 'manager'),
|
||||
|
12
yarn.lock
12
yarn.lock
@ -6237,10 +6237,6 @@ deep-is@~0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
||||
|
||||
deepmerge@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.1.1.tgz#e862b4e45ea0555072bf51e7fd0d9845170ae768"
|
||||
|
||||
default-gateway@^2.6.0:
|
||||
version "2.7.2"
|
||||
resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f"
|
||||
@ -9603,7 +9599,7 @@ is-extendable@^0.1.0, is-extendable@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
|
||||
|
||||
is-extendable@^1.0.0, is-extendable@^1.0.1:
|
||||
is-extendable@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
|
||||
dependencies:
|
||||
@ -13233,12 +13229,6 @@ object.omit@^2.0.0:
|
||||
for-own "^0.1.4"
|
||||
is-extendable "^0.1.1"
|
||||
|
||||
object.omit@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-3.0.0.tgz#0e3edc2fce2ba54df5577ff529f6d97bd8a522af"
|
||||
dependencies:
|
||||
is-extendable "^1.0.0"
|
||||
|
||||
object.pick@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
|
||||
|
Loading…
x
Reference in New Issue
Block a user