0
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-01-28 20:52:21 +01:00

Create a bundled release of Bootstrap with Popper.js inside

This commit is contained in:
Johann-S 2017-08-29 21:16:00 +02:00
parent 0165a620ec
commit 9936bf5944
18 changed files with 214 additions and 56 deletions

View File

@ -8,7 +8,5 @@
}
]
],
"plugins": [
"transform-es2015-modules-strip"
]
"plugins": ["external-helpers"]
}

43
build/rollup.config.js Normal file
View File

@ -0,0 +1,43 @@
const path = require('path')
const babel = require('rollup-plugin-babel')
const resolve = require('rollup-plugin-node-resolve')
const BUNDLE = process.env.BUNDLE === 'true'
var fileDest = 'bootstrap.js'
var external = ['jquery', 'popper.js']
const plugins = [
babel({
exclude: 'node_modules/**', // only transpile our source code
externalHelpersWhitelist: [ // include only required helpers
'typeof',
'classCallCheck',
'createClass',
'inherits',
'possibleConstructorReturn'
]
})
]
const globals = {
jquery: '$',
'popper.js': 'Popper'
}
if (BUNDLE) {
fileDest = 'bootstrap.bundle.js'
// remove last entry in external array to bundle Popper
external.pop()
delete globals['popper.js']
plugins.push(resolve())
}
module.exports = {
input: path.resolve(__dirname, '../js/src/index.js'),
output: {
file: path.resolve(__dirname, `../dist/js/${fileDest}`),
format: 'iife'
},
name: 'bootstrap',
external: external,
globals: globals,
plugins: plugins
}

View File

@ -1,41 +1,19 @@
const fs = require('fs')
const fs = require('fs')
const path = require('path')
const pkg = require(path.resolve(__dirname, '../package.json'))
const year = new Date().getFullYear()
fs.readFile('package.json', (err, data) => {
if (err) {
throw err
}
const pathBoostrap = path.resolve(__dirname, '../dist/js/bootstrap.js')
const pathBootstrapBundle = path.resolve(__dirname, '../dist/js/bootstrap.bundle.js')
const contentFile = fs.readFileSync(pathBoostrap, { encoding: 'UTF8' })
const contentBundleFile = fs.readFileSync(pathBootstrapBundle, { encoding: 'UTF8' })
const pkg = JSON.parse(data)
const year = new Date().getFullYear()
const stampTop =
const stamp =
`/*!
* Bootstrap v${pkg.version} (${pkg.homepage})
* Copyright 2011-${year} ${pkg.author}
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
if (typeof jQuery === 'undefined') {
throw new Error('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')
}
(function ($) {
var version = $.fn.jquery.split(' ')[0].split('.')
if ((version[0] < 3) || (version[0] >= 4)) {
throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v3.0.0 but less than v4.0.0')
}
})(jQuery);
(function () {
`
const stampEnd = `
})();`
process.stdout.write(stampTop)
process.stdin.on('end', () => {
process.stdout.write(stampEnd)
})
process.stdin.pipe(process.stdout)
})
fs.writeFileSync(pathBoostrap, `${stamp}${contentFile}`, { encoding: 'UTF8' })
fs.writeFileSync(pathBootstrapBundle, `${stamp}${contentBundleFile}`, { encoding: 'UTF8' })

View File

@ -1,3 +1,4 @@
import $ from 'jquery'
import Util from './util'
@ -8,7 +9,7 @@ import Util from './util'
* --------------------------------------------------------------------------
*/
const Alert = (($) => {
const Alert = (() => {
/**

View File

@ -1,3 +1,4 @@
import $ from 'jquery'
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta): button.js
@ -5,7 +6,7 @@
* --------------------------------------------------------------------------
*/
const Button = (($) => {
const Button = (() => {
/**

View File

@ -1,3 +1,4 @@
import $ from 'jquery'
import Util from './util'
@ -8,7 +9,7 @@ import Util from './util'
* --------------------------------------------------------------------------
*/
const Carousel = (($) => {
const Carousel = (() => {
/**

View File

@ -1,3 +1,4 @@
import $ from 'jquery'
import Util from './util'
@ -8,7 +9,7 @@ import Util from './util'
* --------------------------------------------------------------------------
*/
const Collapse = (($) => {
const Collapse = (() => {
/**

View File

@ -1,5 +1,5 @@
/* global Popper */
import $ from 'jquery'
import Popper from 'popper.js'
import Util from './util'
@ -10,7 +10,7 @@ import Util from './util'
* --------------------------------------------------------------------------
*/
const Dropdown = (($) => {
const Dropdown = (() => {
/**
* Check for Popper dependency
@ -445,6 +445,6 @@ const Dropdown = (($) => {
return Dropdown
})(jQuery)
})(jQuery, Popper)
export default Dropdown

46
js/src/index.js Normal file
View File

@ -0,0 +1,46 @@
import $ from 'jquery'
import Alert from './alert'
import Button from './button'
import Carousel from './carousel'
import Collapse from './collapse'
import Dropdown from './dropdown'
import Modal from './modal'
import Popover from './popover'
import Scrollspy from './scrollspy'
import Tab from './tab'
import Tooltip from './tooltip'
import Util from './util'
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.6): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
if (typeof jQuery === 'undefined') {
throw new Error('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.')
}
(() => {
const version = $.fn.jquery.split(' ')[0].split('.')
const min = 3
const max = 4
if (version[0] < min || version[0] >= max) {
throw new Error('Bootstrap\'s JavaScript requires at least jQuery v3.0.0 but less than v4.0.0')
}
})(jQuery)
export {
Util,
Alert,
Button,
Carousel,
Collapse,
Dropdown,
Modal,
Popover,
Scrollspy,
Tab,
Tooltip
}

View File

@ -1,3 +1,4 @@
import $ from 'jquery'
import Util from './util'
@ -8,7 +9,7 @@ import Util from './util'
* --------------------------------------------------------------------------
*/
const Modal = (($) => {
const Modal = (() => {
/**

View File

@ -1,3 +1,4 @@
import $ from 'jquery'
import Tooltip from './tooltip'
@ -8,7 +9,7 @@ import Tooltip from './tooltip'
* --------------------------------------------------------------------------
*/
const Popover = (($) => {
const Popover = (() => {
/**

View File

@ -1,3 +1,4 @@
import $ from 'jquery'
import Util from './util'
@ -8,7 +9,7 @@ import Util from './util'
* --------------------------------------------------------------------------
*/
const ScrollSpy = (($) => {
const ScrollSpy = (() => {
/**

View File

@ -1,3 +1,4 @@
import $ from 'jquery'
import Util from './util'
@ -8,7 +9,7 @@ import Util from './util'
* --------------------------------------------------------------------------
*/
const Tab = (($) => {
const Tab = (() => {
/**

View File

@ -1,5 +1,5 @@
/* global Popper */
import $ from 'jquery'
import Popper from 'popper.js'
import Util from './util'
@ -10,7 +10,7 @@ import Util from './util'
* --------------------------------------------------------------------------
*/
const Tooltip = (($) => {
const Tooltip = (() => {
/**
* Check for Popper dependency
@ -728,6 +728,6 @@ const Tooltip = (($) => {
return Tooltip
})(jQuery)
})(jQuery, Popper)
export default Tooltip

View File

@ -1,3 +1,5 @@
import $ from 'jquery'
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta): util.js
@ -5,7 +7,7 @@
* --------------------------------------------------------------------------
*/
const Util = (($) => {
const Util = (() => {
/**

View File

@ -28,6 +28,7 @@
"global-require": "off",
"no-process-env": "off",
"no-process-exit": "off",
"no-sync": "off",
// Stylistic Issues
"brace-style": "off",

73
package-lock.json generated
View File

@ -513,6 +513,15 @@
"babel-runtime": "6.26.0"
}
},
"babel-plugin-external-helpers": {
"version": "6.22.0",
"resolved": "https://registry.npmjs.org/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz",
"integrity": "sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-es2015-arrow-functions": {
"version": "6.22.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
@ -963,6 +972,15 @@
"repeat-element": "1.1.2"
}
},
"browser-resolve": {
"version": "1.11.2",
"resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
"integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
"dev": true,
"requires": {
"resolve": "1.1.7"
}
},
"browserslist": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.3.3.tgz",
@ -1714,6 +1732,12 @@
"integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
"dev": true
},
"estree-walker": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz",
"integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=",
"dev": true
},
"esutils": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
@ -2987,6 +3011,12 @@
"is-extglob": "1.0.0"
}
},
"is-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
"integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
"dev": true
},
"is-npm": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
@ -4429,6 +4459,12 @@
"integrity": "sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I=",
"dev": true
},
"popper.js": {
"version": "1.12.5",
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.12.5.tgz",
"integrity": "sha512-6R2eXIy1xYukMNutoD+y/Gj0IpjEQhivyZonm5Vz0Fp8jdc7kvheKCvpM/t+PxqKb7VbLVnvPVEdTyslEb7f6w==",
"dev": true
},
"postcss": {
"version": "6.0.9",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz",
@ -5238,6 +5274,43 @@
"glob": "7.1.2"
}
},
"rollup": {
"version": "0.49.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-0.49.2.tgz",
"integrity": "sha512-9mySqItSwq5/dXYQyFGrrzqV282EZfz4kSCU2m4e6OjgqLmIsp9zK6qNQ6wbBWR4EhASEqQMBQ/IF45jaNPAtw==",
"dev": true
},
"rollup-plugin-babel": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-3.0.2.tgz",
"integrity": "sha512-ALGPBFtwJZcYHsNPM6RGJlEncTzAARPvZOGjNPZgDe5hS5t6sJGjiOWibEFVEz5LQN7S7spvCBILaS4N1Cql2w==",
"dev": true,
"requires": {
"rollup-pluginutils": "1.5.2"
}
},
"rollup-plugin-node-resolve": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz",
"integrity": "sha1-i4l8TDAw1QASd7BRSyXSygloPuA=",
"dev": true,
"requires": {
"browser-resolve": "1.11.2",
"builtin-modules": "1.1.1",
"is-module": "1.0.0",
"resolve": "1.1.7"
}
},
"rollup-pluginutils": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
"integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=",
"dev": true,
"requires": {
"estree-walker": "0.2.1",
"minimatch": "3.0.4"
}
},
"run-async": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",

View File

@ -33,9 +33,13 @@
"js-lint": "eslint js/ && eslint --config js/tests/.eslintrc.json --env node build/ Gruntfile.js",
"js-lint-docs": "eslint --config js/tests/.eslintrc.json assets/js/ sw.js",
"js-compile": "npm-run-all --parallel js-compile-*",
"js-compile-bundle": "shx cat js/src/util.js js/src/alert.js js/src/button.js js/src/carousel.js js/src/collapse.js js/src/dropdown.js js/src/modal.js js/src/scrollspy.js js/src/tab.js js/src/tooltip.js js/src/popover.js | shx sed \"s/^(import|export).*//\" | babel --filename js/src/bootstrap.js | node build/stamp.js > dist/js/bootstrap.js",
"js-compile-plugins": "babel js/src/ --out-dir js/dist/ --source-maps",
"js-minify": "uglifyjs --config-file build/uglifyjs.config.json --output dist/js/bootstrap.min.js dist/js/bootstrap.js",
"js-compile-standalone": "rollup --environment BUNDLE:false --config build/rollup.config.js",
"js-compile-bundle": "rollup --environment BUNDLE:true --config build/rollup.config.js",
"js-compile-plugins": "babel --no-babelrc js/src/ --out-dir js/dist/ --source-maps --presets=es2015 --plugins=transform-es2015-modules-strip",
"postjs-compile": "node build/stamp.js",
"js-minify": "npm-run-all --parallel js-minify-*",
"js-minify-standalone": "uglifyjs --config-file build/uglifyjs.config.json --output dist/js/bootstrap.min.js dist/js/bootstrap.js",
"js-minify-bundle": "uglifyjs --config-file build/uglifyjs.config.json --output dist/js/bootstrap.bundle.min.js dist/js/bootstrap.bundle.js",
"js-minify-docs": "uglifyjs --config-file build/uglifyjs.config.json --output assets/js/docs.min.js assets/js/vendor/anchor.min.js assets/js/vendor/clipboard.min.js assets/js/vendor/holder.min.js assets/js/src/application.js assets/js/src/pwa.js",
"js-test": "phantomjs ./node_modules/qunit-phantomjs-runner/runner.js js/tests/index.html 60",
"js-test-cloud": "ruby -r webrick -e \"s = WEBrick::HTTPServer.new(:Port => 3000, :DocumentRoot => Dir.pwd, :Logger => WEBrick::Log.new('/dev/null'), :AccessLog => []); trap('INT') { s.shutdown }; s.start\" & grunt saucelabs-qunit",
@ -74,6 +78,7 @@
"autoprefixer": "^7.1.2",
"babel-cli": "^6.24.1",
"babel-eslint": "^7.2.3",
"babel-plugin-external-helpers": "^6.22.0",
"babel-plugin-transform-es2015-modules-strip": "^0.1.1",
"babel-preset-es2015": "^6.24.1",
"clean-css-cli": "^4.1.6",
@ -86,9 +91,13 @@
"nodemon": "^1.11.0",
"npm-run-all": "^4.0.2",
"phantomjs-prebuilt": "^2.1.14",
"popper.js": "^1.12.5",
"postcss-cli": "^4.1.0",
"qunit-phantomjs-runner": "^2.3.0",
"qunitjs": "^2.4.0",
"rollup": "^0.49.2",
"rollup-plugin-babel": "^3.0.2",
"rollup-plugin-node-resolve": "^3.0.0",
"shelljs": "^0.7.8",
"shx": "^0.2.2",
"uglify-js": "^3.0.24"