build-plugins.js 2.55 KB
Newer Older
1
2
/*!
 * Script to build our plugins to use them separately.
XhmikosR's avatar
XhmikosR committed
3
4
 * Copyright 2019 The Bootstrap Authors
 * Copyright 2019 Twitter, Inc.
5
6
7
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */

8
9
'use strict'

Johann-S's avatar
Johann-S committed
10
11
12
13
const path    = require('path')
const rollup  = require('rollup')
const babel   = require('rollup-plugin-babel')
const banner  = require('./banner.js')
14

XhmikosR's avatar
XhmikosR committed
15
const TEST    = process.env.NODE_ENV === 'test'
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
const plugins = [
  babel({
    exclude: 'node_modules/**', // Only transpile our source code
    externalHelpersWhitelist: [ // Include only required helpers
      'defineProperties',
      'createClass',
      'inheritsLoose',
      'defineProperty',
      'objectSpread'
    ]
  })
]
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'),
38
  Toast: path.resolve(__dirname, '../js/src/toast.js'),
39
40
41
  Tooltip: path.resolve(__dirname, '../js/src/tooltip.js'),
  Util: path.resolve(__dirname, '../js/src/util.js')
}
XhmikosR's avatar
XhmikosR committed
42
const rootPath = TEST ? '../js/coverage/dist/' : '../js/dist/'
43

XhmikosR's avatar
XhmikosR committed
44
45
function build(plugin) {
  console.log(`Building ${plugin} plugin...`)
46

Johann-S's avatar
Johann-S committed
47
  const external = ['jquery', 'popper.js']
XhmikosR's avatar
XhmikosR committed
48
49
50
51
  const globals = {
    jquery: 'jQuery', // Ensure we use jQuery which is always available even in noConflict mode
    'popper.js': 'Popper'
  }
52

XhmikosR's avatar
XhmikosR committed
53
54
55
56
57
  // Do not bundle Util in plugins
  if (plugin !== 'Util') {
    external.push(bsPlugins.Util)
    globals[bsPlugins.Util] = 'Util'
  }
58

XhmikosR's avatar
XhmikosR committed
59
60
61
62
63
  // Do not bundle Tooltip in Popover
  if (plugin === 'Popover') {
    external.push(bsPlugins.Tooltip)
    globals[bsPlugins.Tooltip] = 'Tooltip'
  }
64

XhmikosR's avatar
XhmikosR committed
65
  const pluginFilename = `${plugin.toLowerCase()}.js`
66

XhmikosR's avatar
XhmikosR committed
67
68
69
70
71
72
73
74
75
76
77
78
  rollup.rollup({
    input: bsPlugins[plugin],
    plugins,
    external
  }).then((bundle) => {
    bundle.write({
      banner: banner(pluginFilename),
      format: 'umd',
      name: plugin,
      sourcemap: true,
      globals,
      file: path.resolve(__dirname, `${rootPath}${pluginFilename}`)
79
    })
XhmikosR's avatar
XhmikosR committed
80
81
      .then(() => console.log(`Building ${plugin} plugin... Done!`))
      .catch((err) => console.error(`${plugin}: ${err}`))
82
  })
XhmikosR's avatar
XhmikosR committed
83
84
85
}

Object.keys(bsPlugins).forEach((plugin) => build(plugin))