129 lines
2.9 KiB
JavaScript
129 lines
2.9 KiB
JavaScript
import { resolve } from 'path'
|
|
import sourceMaps from 'rollup-plugin-sourcemaps'
|
|
import nodeResolve from 'rollup-plugin-node-resolve'
|
|
import json from 'rollup-plugin-json'
|
|
import commonjs from 'rollup-plugin-commonjs'
|
|
import replace from 'rollup-plugin-replace'
|
|
import { uglify } from 'rollup-plugin-uglify'
|
|
import { terser } from 'rollup-plugin-terser'
|
|
import { getIfUtils, removeEmpty } from 'webpack-config-utils'
|
|
|
|
import pkg from '../package.json'
|
|
const {
|
|
pascalCase,
|
|
normalizePackageName,
|
|
getOutputFileName,
|
|
} = require('./helpers')
|
|
|
|
/**
|
|
* @typedef {import('./types').RollupConfig} Config
|
|
*/
|
|
/**
|
|
* @typedef {import('./types').RollupPlugin} Plugin
|
|
*/
|
|
|
|
const env = process.env.NODE_ENV || 'development'
|
|
const { ifProduction } = getIfUtils(env)
|
|
|
|
const LIB_NAME = pascalCase(normalizePackageName(pkg.name))
|
|
const ROOT = resolve(__dirname, '..')
|
|
const DIST = resolve(ROOT, 'dist')
|
|
|
|
/**
|
|
* @type {{entry:{esm5: string, esm2015: string},bundles:string}}
|
|
*/
|
|
const PATHS = {
|
|
entry: {
|
|
esm5: resolve(DIST, 'esm5'),
|
|
esm2015: resolve(DIST, 'esm2015'),
|
|
},
|
|
bundles: resolve(DIST, 'bundles'),
|
|
}
|
|
|
|
/**
|
|
* @type {string[]}
|
|
*/
|
|
const external = Object.keys(pkg.peerDependencies) || []
|
|
|
|
/**
|
|
* @type {Plugin[]}
|
|
*/
|
|
const plugins = /** @type {Plugin[]} */ ([
|
|
// Allow json resolution
|
|
json(),
|
|
|
|
// Allow bundling cjs modules (unlike webpack, rollup doesn't understand cjs)
|
|
commonjs(),
|
|
|
|
// Allow node_modules resolution, so you can use 'external' to control
|
|
// which external modules to include in the bundle
|
|
// https://github.com/rollup/rollup-plugin-node-resolve#usage
|
|
nodeResolve(),
|
|
|
|
// Resolve source maps to the original source
|
|
sourceMaps(),
|
|
|
|
// properly set process.env.NODE_ENV within `./environment.ts`
|
|
replace({
|
|
exclude: 'node_modules/**',
|
|
'process.env.NODE_ENV': JSON.stringify(env),
|
|
}),
|
|
])
|
|
|
|
/**
|
|
* @type {Config}
|
|
*/
|
|
const CommonConfig = {
|
|
input: {},
|
|
output: {},
|
|
inlineDynamicImports: true,
|
|
// Indicate here external modules you don't wanna include in your bundle (i.e.: 'lodash')
|
|
external,
|
|
}
|
|
|
|
/**
|
|
* @type {Config}
|
|
*/
|
|
const UMDconfig = {
|
|
...CommonConfig,
|
|
input: resolve(PATHS.entry.esm5, 'index.js'),
|
|
output: {
|
|
file: getOutputFileName(
|
|
resolve(PATHS.bundles, 'index.umd.js'),
|
|
ifProduction()
|
|
),
|
|
// file: getOutputFileName('dist/bundles/index.umd.js', ifProduction()),
|
|
format: 'umd',
|
|
name: LIB_NAME,
|
|
sourcemap: true,
|
|
},
|
|
plugins: /** @type {Plugin[]} */ (removeEmpty([
|
|
...plugins,
|
|
ifProduction(uglify()),
|
|
])),
|
|
}
|
|
|
|
/**
|
|
* @type {Config}
|
|
*/
|
|
const FESMconfig = {
|
|
...CommonConfig,
|
|
input: resolve(PATHS.entry.esm2015, 'index.js'),
|
|
output: [
|
|
{
|
|
file: getOutputFileName(
|
|
resolve(PATHS.bundles, 'index.esm.js'),
|
|
ifProduction()
|
|
),
|
|
format: 'es',
|
|
sourcemap: true,
|
|
},
|
|
],
|
|
plugins: /** @type {Plugin[]} */ (removeEmpty([
|
|
...plugins,
|
|
ifProduction(terser()),
|
|
])),
|
|
}
|
|
|
|
export default [UMDconfig, FESMconfig]
|