UNPKG

xeira

Version:

One Web Dev stack tool to rule them all

126 lines (109 loc) 3.34 kB
import json from '@rollup/plugin-json' import {babel} from '@rollup/plugin-babel' import replace from '@rollup/plugin-replace' import externals from 'rollup-plugin-node-externals' import {nodeResolve} from '@rollup/plugin-node-resolve' import polyfillNode from 'rollup-plugin-polyfill-node' import commonjs from '@rollup/plugin-commonjs' import scss from 'rollup-plugin-postcss' import autoprefixer from 'autoprefixer' import terser from '@rollup/plugin-terser' import {rollupBanner} from './commons/banner.mjs' import {getDynamicImportOptions} from './commons/dynImports.mjs' import { getRollupPluginForResolvingAliases } from '../../../utils/aliases.mjs' import { getBabelConfig } from '../../../config/babel.mjs' const NODE_ENV = process.env?.NODE_ENV || 'production' async function rollupModulesForEsm(context, pkgJsonPath, pkgJson, input, bundleMin= 2) { const customBabelConfig= { exclude: 'node_modules/**', /*https://github.com/rollup/plugins/tree/master/packages/babel#babelhelpers*/ // TODO // context.isAnApp() // ? 'runtime' https://github.com/rollup/plugins/tree/master/packages/babel#injected-helpers // : bundled babelHelpers: 'bundled', presets: [ [ "@babel/preset-modules", { // Don't spoof `.name` for Arrow Functions, which breaks when minified anyway. loose: true, }, ], ... context.usesReact ? [ "@babel/preset-react" //{ // // Compile JSX Spread to Object.assign(), which is reliable in ESM browsers. // //useBuiltIns: true, //}, ] : [], ] } const mergedBabelConfig = await getBabelConfig(context, input, customBabelConfig) const polyfill = context.polyfillNode ? [polyfillNode()] : [] const inputOptions= { input, plugins: [ replace({ preventAssignment: true, 'global.process.env.NODE_ENV': JSON.stringify(NODE_ENV), 'process.env.NODE_ENV': JSON.stringify(NODE_ENV) }), babel(mergedBabelConfig), commonjs({ esmExternals: true }), ...getRollupPluginForResolvingAliases(context.pkgPath), json(), ...polyfill, externals({ packagePath: pkgJsonPath }), nodeResolve({ rootDir: context.pkgPath, exportConditions: ['node'], }), scss({ extract: true, plugins: [ autoprefixer() ], use: { sass: { silenceDeprecations: ['legacy-js-api'], } }, }) ] } const outputFile = context.pkgp(context.getEsmOutput(false)) const outputFileMin = context.pkgp(context.getEsmOutput(true)) const outputDef= { ...getDynamicImportOptions (context, outputFile), format: 'es', exports: 'named', banner: rollupBanner(pkgJson), sourcemap: true } const outputDefMin = { ...getDynamicImportOptions (context, outputFileMin), format: 'es', exports: 'named', banner: rollupBanner(pkgJson), plugins: [ terser({ ecma: 8, safari10: true }) ] } const outputs= bundleMin == 2 ? [outputDef, outputDefMin] : bundleMin == 1 ? [outputDefMin] : [outputDef] return[inputOptions, outputs] } export { rollupModulesForEsm }