diff options
| author | Johann-S <[email protected]> | 2018-06-27 11:33:07 +0200 |
|---|---|---|
| committer | Johann-S <[email protected]> | 2018-07-19 19:59:45 +0200 |
| commit | eb81c39f2c36d88d4ebc062a2fa179980827e8be (patch) | |
| tree | 245e42357d705cf51689cf8e508292e38d2a3e7c /build/build-plugins.js | |
| parent | 6cf8700fd9fd096855d6510ceef9c1ff225f8e40 (diff) | |
| download | bootstrap-eb81c39f2c36d88d4ebc062a2fa179980827e8be.tar.xz bootstrap-eb81c39f2c36d88d4ebc062a2fa179980827e8be.zip | |
feat(plugins): allow to import separate plugins
Diffstat (limited to 'build/build-plugins.js')
| -rw-r--r-- | build/build-plugins.js | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/build/build-plugins.js b/build/build-plugins.js new file mode 100644 index 000000000..22a179066 --- /dev/null +++ b/build/build-plugins.js @@ -0,0 +1,81 @@ +/*! + * Script to build our plugins to use them separately. + * Copyright 2018 The Bootstrap Authors + * Copyright 2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +'use strict' + +const rollup = require('rollup') +const path = require('path') +const babel = require('rollup-plugin-babel') +const TEST = process.env.NODE_ENV === 'test' + +const plugins = [ + babel({ + exclude: 'node_modules/**', // Only transpile our source code + externalHelpersWhitelist: [ // Include only required helpers + 'defineProperties', + 'createClass', + 'inheritsLoose', + 'defineProperty', + 'objectSpread' + ] + }) +] + +const format = 'umd' +const rootPath = !TEST ? '../js/dist/' : '../js/coverage/dist/' +const bsPlugins = { + Alert: path.resolve(__dirname, '../js/src/alert.js'), + Button: path.resolve(__dirname, '../js/src/button.js'), + Carousel: path.resolve(__dirname, '../js/src/carousel.js'), + Collapse: path.resolve(__dirname, '../js/src/collapse.js'), + Dropdown: path.resolve(__dirname, '../js/src/dropdown.js'), + Modal: path.resolve(__dirname, '../js/src/modal.js'), + Popover: path.resolve(__dirname, '../js/src/popover.js'), + ScrollSpy: path.resolve(__dirname, '../js/src/scrollspy.js'), + Tab: path.resolve(__dirname, '../js/src/tab.js'), + Tooltip: path.resolve(__dirname, '../js/src/tooltip.js'), + Util: path.resolve(__dirname, '../js/src/util.js') +} + +Object.keys(bsPlugins) + .forEach((pluginKey) => { + console.log(`Building ${pluginKey} plugin...`) + + const external = ['jquery', 'popper.js'] + const globals = { + jquery: 'jQuery', // Ensure we use jQuery which is always available even in noConflict mode + 'popper.js': 'Popper' + } + + // Do not bundle Util in plugins + if (pluginKey !== 'Util') { + external.push(bsPlugins.Util) + globals[bsPlugins.Util] = 'Util' + } + + // Do not bundle Tooltip in Popover + if (pluginKey === 'Popover') { + external.push(bsPlugins.Tooltip) + globals[bsPlugins.Tooltip] = 'Tooltip' + } + + rollup.rollup({ + input: bsPlugins[pluginKey], + plugins, + external + }).then((bundle) => { + bundle.write({ + format, + name: pluginKey, + sourcemap: true, + globals, + file: path.resolve(__dirname, `${rootPath}${pluginKey.toLowerCase()}.js`) + }) + .then(() => console.log(`Building ${pluginKey} plugin... Done !`)) + .catch((err) => console.error(`${pluginKey}: ${err}`)) + }) + }) |
