Skip to content

Commit

Permalink
Packages: Make Babel config less fragile
Browse files Browse the repository at this point in the history
  • Loading branch information
gziolo committed May 30, 2018
1 parent decc7b5 commit fdb107e
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 24 deletions.
26 changes: 2 additions & 24 deletions bin/packages/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const mkdirp = require( 'mkdirp' );
* Internal dependencies
*/
const getPackages = require( './get-packages' );
const getBabelConfig = require( './get-babel-config' );

/**
* Module Constants
Expand All @@ -31,29 +32,6 @@ const BUILD_DIR = {
};
const DONE = chalk.reset.inverse.bold.green( ' DONE ' );

/**
* Babel Configuration
*/
const babelDefaultConfig = require( '@wordpress/babel-preset-default' );
babelDefaultConfig.babelrc = false;
// TODO: It should become the default value when all modules are moved to packages.
babelDefaultConfig.plugins[ 1 ][ 1 ].pragma = 'createElement';
const presetEnvConfig = babelDefaultConfig.presets[ 0 ][ 1 ];
const babelConfigs = {
main: Object.assign(
{},
babelDefaultConfig,
{ presets: [
[ 'env', Object.assign(
{},
presetEnvConfig,
{ modules: 'commonjs' },
) ],
] }
),
module: babelDefaultConfig,
};

/**
* Get the package name for a specified file
*
Expand Down Expand Up @@ -100,7 +78,7 @@ function buildFile( file, silent ) {
function buildFileFor( file, silent, environment ) {
const buildDir = BUILD_DIR[ environment ];
const destPath = getBuildPath( file, buildDir );
const babelOptions = babelConfigs[ environment ];
const babelOptions = getBabelConfig( environment );

mkdirp.sync( path.dirname( destPath ) );
const transformed = babel.transformFileSync( file, babelOptions ).code;
Expand Down
48 changes: 48 additions & 0 deletions bin/packages/get-babel-config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/**
* External dependencies
*/
const { isArray, map } = require( 'lodash' );
const babelPluginTransformReactJSX = require( 'babel-plugin-transform-react-jsx' );
const babelPresetEnv = require( 'babel-preset-env' );

/**
* WordPress dependencies
*/
const babelDefaultConfig = require( '@wordpress/babel-preset-default' );

const plugins = map( babelDefaultConfig.plugins, ( plugin ) => {
if ( isArray( plugin ) && plugin[ 0 ] === babelPluginTransformReactJSX ) {
return [ babelPluginTransformReactJSX, { pragma: 'createElement' } ];
}

return plugin;
} );

const babelConfigs = {
main: {
...babelDefaultConfig,
babelrc: false,
plugins,
presets: map( babelDefaultConfig.presets, ( preset ) => {
if ( isArray( preset ) && preset[ 0 ] === babelPresetEnv ) {
return [ babelPresetEnv, Object.assign(
{},
preset[ 1 ],
{ modules: 'commonjs' }
) ];
}
return preset;
} ),
},
module: {
...babelDefaultConfig,
babelrc: false,
plugins,
},
};

function getBabelConfig( environment ) {
return babelConfigs[ environment ];
}

module.exports = getBabelConfig;

0 comments on commit fdb107e

Please sign in to comment.