UNPKG

@interaktiv/dia-scripts

Version:

CLI toolbox with common scripts for most sort of projects at DIA

82 lines (73 loc) 3.16 kB
"use strict"; const browserslist = require('browserslist'); const { ifAnyDep, parseEnv, appDirectory, pkg, getSupportedNodeVersion } = require('../utils'); const { BABEL_ENV, NODE_ENV, BUILD_FORMAT } = process.env; const isTest = (BABEL_ENV || NODE_ENV) === 'test'; const isPreact = parseEnv('BUILD_PREACT', false); const isRollup = parseEnv('BUILD_ROLLUP', false); const isUMD = BUILD_FORMAT === 'umd'; const isCJS = BUILD_FORMAT === 'cjs'; const isWebpack = parseEnv('BUILD_WEBPACK', false); const treeshake = parseEnv('BUILD_TREESHAKE', isRollup || isWebpack); const alias = parseEnv('BUILD_ALIAS', isPreact ? { react: 'preact' } : null); const hasBabelRuntimeDep = Boolean(pkg.dependencies && pkg.dependencies['@babel/runtime']); const RUNTIME_HELPERS_WARN = 'You should add @babel/runtime as dependency to your package. It will allow reusing "babel helpers" from node_modules rather than bundling their copies into your files.'; if (treeshake === false && hasBabelRuntimeDep === false && isTest === false) { throw new Error(RUNTIME_HELPERS_WARN); } else if (treeshake && isUMD === false && hasBabelRuntimeDep === false) { console.warn(RUNTIME_HELPERS_WARN); } /** * Use the strategy declared by browserslist to load browsers configuration. * fallback to the default if don't found custom configuration * * @see https://github.com/browserslist/browserslist/blob/master/node.js#L139 */ const browsersConfig = browserslist.loadConfig({ path: appDirectory }) || ['ie 10', 'ios 9']; const minimumSupportedNodeVersion = getSupportedNodeVersion(pkg); if (!minimumSupportedNodeVersion) { throw new Error(`Unable to determine the oldest version in the range in your package.json at engines.node: "${pkg.engines.node}". Please attempt to make it less ambiguous.`); } const envTargets = [isTest ? { node: 'current' } : null, isWebpack || isRollup ? { browsers: browsersConfig } : null, { node: minimumSupportedNodeVersion }].filter(Boolean).shift(); const envOptions = { modules: false, loose: true, targets: envTargets }; // TODO: Make it possible to adjust source-dir via flag module.exports = () => ({ presets: [[require.resolve('@babel/preset-env'), envOptions], ifAnyDep(['react', 'preact'], [require.resolve('@babel/preset-react'), { pragma: isPreact ? 'React.h' : undefined }]), ifAnyDep(['flow-bin'], [require.resolve('@babel/preset-flow')])].filter(Boolean), plugins: [[require.resolve('@babel/plugin-transform-runtime'), { useESModules: treeshake && isCJS === false }], require.resolve('babel-plugin-macros'), alias ? [require.resolve('babel-plugin-module-resolver'), { root: ['./src'], alias }] : null, [require.resolve('babel-plugin-transform-react-remove-prop-types'), isPreact ? { removeImport: true } : { mode: 'unsafe-wrap' }], isUMD ? require.resolve('babel-plugin-transform-inline-environment-variables') : null, [require.resolve('@babel/plugin-proposal-class-properties'), { loose: true }], require.resolve('babel-plugin-minify-dead-code-elimination'), treeshake ? null : require.resolve('@babel/plugin-transform-modules-commonjs')].filter(Boolean) });