// rollup.config.js import fs from "fs"; import path from "path"; import vue from "rollup-plugin-vue"; import alias from "@rollup/plugin-alias"; import commonjs from "@rollup/plugin-commonjs"; import resolve from "@rollup/plugin-node-resolve"; import replace from "@rollup/plugin-replace"; import babel from "@rollup/plugin-babel"; import PostCSS from "rollup-plugin-postcss"; import { terser } from "rollup-plugin-terser"; import minimist from "minimist"; // Get browserslist config and remove ie from es build targets const esbrowserslist = fs .readFileSync("./.browserslistrc") .toString() .split("\n") .filter((entry) => entry && entry.substring(0, 2) !== "ie"); // Extract babel preset-env config, to combine with esbrowserslist const babelPresetEnvConfig = require("../babel.config").presets.filter( (entry) => entry[0] === "@babel/preset-env" )[0][1]; const argv = minimist(process.argv.slice(2)); const projectRoot = path.resolve(__dirname, ".."); const baseConfig = { input: "src/entry.js", plugins: { preVue: [ alias({ entries: [ { find: "@", replacement: `${path.resolve(projectRoot, "src")}`, }, ], }), ], replace: { "process.env.NODE_ENV": JSON.stringify("production"), }, vue: {}, postVue: [ resolve({ extensions: [".js", ".jsx", ".ts", ".tsx", ".vue"], }), // Process only `<style module>` blocks. PostCSS({ modules: { generateScopedName: "[local]___[hash:base64:5]", }, include: /&module=.*\.css$/, }), // Process all `<style>` blocks except `<style module>`. PostCSS({ include: /(?<!&module=.*)\.css$/ }), commonjs(), ], babel: { exclude: "node_modules/**", extensions: [".js", ".jsx", ".ts", ".tsx", ".vue"], babelHelpers: "bundled", }, }, }; // ESM/UMD/IIFE shared settings: externals // Refer to https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency const external = [ // list external dependencies, exactly the way it is written in the import statement. // eg. 'jquery' "vue", "bootstrap", "bootstrap-icons","vue-currency-input" ]; // UMD/IIFE shared settings: output.globals // Refer to https://rollupjs.org/guide/en#output-globals for details const globals = { // Provide global variable names to replace your external imports // eg. jquery: '$' vue: "Vue", }; // Customize configs for individual targets const buildFormats = []; if (!argv.format || argv.format === "es") { const esConfig = { ...baseConfig, input: "src/entry.esm.js", external, output: { file: "dist/vue-bootstrap5-components.esm.js", format: "esm", exports: "named", }, plugins: [ replace(baseConfig.plugins.replace), ...baseConfig.plugins.preVue, vue(baseConfig.plugins.vue), ...baseConfig.plugins.postVue, babel({ ...baseConfig.plugins.babel, presets: [ [ "@babel/preset-env", { ...babelPresetEnvConfig, targets: esbrowserslist, }, ], ], }), ], }; buildFormats.push(esConfig); } if (!argv.format || argv.format === "cjs") { const umdConfig = { ...baseConfig, external, output: { compact: true, file: "dist/vue-bootstrap5-components.ssr.js", format: "cjs", name: "VueBootstrap5Components", exports: "auto", globals, }, plugins: [ replace(baseConfig.plugins.replace), ...baseConfig.plugins.preVue, vue(baseConfig.plugins.vue), ...baseConfig.plugins.postVue, babel(baseConfig.plugins.babel), ], }; buildFormats.push(umdConfig); } if (!argv.format || argv.format === "iife") { const unpkgConfig = { ...baseConfig, external, output: { compact: true, file: "dist/vue-bootstrap5-components.min.js", format: "iife", name: "VueBootstrap5Components", exports: "auto", globals, }, plugins: [ replace(baseConfig.plugins.replace), ...baseConfig.plugins.preVue, vue(baseConfig.plugins.vue), ...baseConfig.plugins.postVue, babel(baseConfig.plugins.babel), terser({ output: { ecma: 5, }, }), ], }; buildFormats.push(unpkgConfig); } // Export config export default buildFormats;