77 lines
2.5 KiB
JavaScript
77 lines
2.5 KiB
JavaScript
"use strict";
|
|
|
|
const path = require(`path`);
|
|
|
|
const resolve = m => require.resolve(m);
|
|
|
|
const IS_TEST = (process.env.BABEL_ENV || process.env.NODE_ENV) === `test`;
|
|
|
|
const loadCachedConfig = () => {
|
|
let pluginBabelConfig = {};
|
|
|
|
if (!IS_TEST) {
|
|
try {
|
|
pluginBabelConfig = require(path.join(process.cwd(), `./.cache/babelState.json`));
|
|
} catch (err) {
|
|
if (err.message.includes(`Cannot find module`)) {
|
|
// This probably is being used outside of the Gatsby CLI.
|
|
throw Error(`\`babel-preset-gatsby\` has been loaded, which consumes config generated by the Gatsby CLI. Set \`NODE_ENV=test\` to bypass, or run \`gatsby build\` first.`);
|
|
} else {
|
|
throw err;
|
|
}
|
|
}
|
|
}
|
|
|
|
return pluginBabelConfig;
|
|
};
|
|
|
|
module.exports = function preset(_, options = {}) {
|
|
let {
|
|
targets = null
|
|
} = options; // TODO(v3): Remove process.env.GATSBY_BUILD_STAGE, needs to be passed as an option
|
|
|
|
const stage = options.stage || process.env.GATSBY_BUILD_STAGE || `test`;
|
|
const pluginBabelConfig = loadCachedConfig();
|
|
const absoluteRuntimePath = path.dirname(require.resolve(`@babel/runtime/package.json`));
|
|
|
|
if (!targets) {
|
|
if (stage === `build-html` || stage === `test`) {
|
|
targets = {
|
|
node: `current`
|
|
};
|
|
} else {
|
|
targets = pluginBabelConfig.browserslist;
|
|
}
|
|
}
|
|
|
|
return {
|
|
presets: [[resolve(`@babel/preset-env`), {
|
|
corejs: 2,
|
|
loose: true,
|
|
modules: stage === `test` ? `commonjs` : false,
|
|
useBuiltIns: `usage`,
|
|
targets,
|
|
// Exclude transforms that make all code slower (https://github.com/facebook/create-react-app/pull/5278)
|
|
exclude: [`transform-typeof-symbol`]
|
|
}], [resolve(`@babel/preset-react`), {
|
|
useBuiltIns: true,
|
|
pragma: `React.createElement`,
|
|
development: stage === `develop`
|
|
}]],
|
|
plugins: [[resolve(`@babel/plugin-proposal-class-properties`), {
|
|
loose: true
|
|
}], resolve(`babel-plugin-macros`), resolve(`@babel/plugin-syntax-dynamic-import`), [resolve(`@babel/plugin-transform-runtime`), {
|
|
corejs: false,
|
|
helpers: stage === `develop` || stage === `test`,
|
|
regenerator: true,
|
|
useESModules: stage !== `test`,
|
|
absoluteRuntimePath
|
|
}], [resolve(`@babel/plugin-transform-spread`), {
|
|
loose: false // Fixes #14848
|
|
|
|
}], IS_TEST && resolve(`babel-plugin-dynamic-import-node`), stage === `build-javascript` && [// Remove PropTypes from production build
|
|
resolve(`babel-plugin-transform-react-remove-prop-types`), {
|
|
removeImport: true
|
|
}]].filter(Boolean)
|
|
};
|
|
}; |