foundation-sites
Version:
The most advanced responsive front-end framework in the world.
148 lines (136 loc) • 5.54 kB
JavaScript
var gulp = require('gulp');
var concat = require('gulp-concat');
var webpackStream = require('webpack-stream');
var webpack = require('webpack');
var named = require('vinyl-named');
var sourcemaps = require('gulp-sourcemaps');
var utils = require('../utils.js');
var CONFIG = require('../config.js');
// ----- WEBPACK CONFIGURATION -----
//
// The following sets up all imports from within Foundation as externals, for the purpose
// of replicating the "drop in dist file" approach of prior versions.
// THIS IS NOT RECOMMENDED FOR MOST USERS. Chances are you either want everything
// (just throw in foundation.js or foundation.min.js) or you should be using a build
// system.
//
// Generate the webpack "Externals" configuration for UMD modules.
// This tells webpack that the modules imported with the listed paths should not
// be included in the build but will be provided later from an external source.
//
// `umdExternals` is used to generate the webpack "externals" configuration:
// an object indicating to different module tools under which name our modules
// are declared. "root" is the global variable name to use in module-less
// environments (or in the namespace if given).
//
// See https://webpack.js.org/configuration/externals/#externals
//
var webpackExternalPlugins = Object.assign(
// | Module import path | External source names and paths
utils.umdExternals({
'jquery': { root: 'jQuery' },
}),
utils.umdExternals({
'./foundation.core': { root: 'foundation.core', default: './foundation.core' },
'./foundation.core.utils': { root: 'foundation.core', default: './foundation.core' },
'./foundation.core.plugin': { root: 'foundation.core', default: './foundation.core' },
'./foundation.util.imageLoader': { root: 'foundation.util.imageLoader' },
'./foundation.util.keyboard': { root: 'foundation.util.keyboard' },
'./foundation.util.mediaQuery': { root: 'foundation.util.mediaQuery' },
'./foundation.util.motion': { root: 'foundation.util.motion' },
'./foundation.util.nest': { root: 'foundation.util.nest' },
'./foundation.util.timer': { root: 'foundation.util.timer' },
'./foundation.util.touch': { root: 'foundation.util.touch' },
'./foundation.util.box': { root: 'foundation.util.box' },
'./foundation.dropdownMenu': { root: 'foundation.dropdownMenu' },
'./foundation.drilldown': { root: 'foundation.drilldown' },
'./foundation.accordionMenu': { root: 'foundation.accordionMenu' },
'./foundation.accordion': { root: 'foundation.accordion' },
'./foundation.tabs': { root: 'foundation.tabs' },
'./foundation.smoothScroll': { root: 'foundation.smoothScroll' },
}, {
// Search for the module in this global variable in module-less environments.
namespace: CONFIG.JS_BUNDLE_NAMESPACE
})
);
// The webpack "output" configuration for UMD modules.
// Makes the modules being exported as UMD modules. In module-less environments,
// modules will be stored in the global variable defined by JS_BUNDLE_NAMESPACE.
var webpackOutputAsExternal = {
library: [CONFIG.JS_BUNDLE_NAMESPACE, '[name]'],
libraryTarget: 'umd',
};
var webpackConfig = {
mode: 'development',
externals: utils.umdExternals({
// Use the global jQuery object "jQuery" in module-less environments.
'jquery': { root: 'jQuery' },
}),
module: {
rules: [
{
test: /.js$/,
use: [
{
loader: 'babel-loader'
}
]
}
]
},
output: {
libraryTarget: 'umd',
},
// https://github.com/shama/webpack-stream#source-maps
devtool: 'source-map',
stats: {
chunks: false,
entrypoints: false,
}
}
// ----- TASKS -----
//
// Compiles JavaScript into a single file
gulp.task('javascript', gulp.series('javascript:foundation', 'javascript:deps', 'javascript:docs'));
// Core has to be dealt with slightly differently due to bootstrapping externals
// and the dependency on foundation.core.utils
//
gulp.task('javascript:plugin-core', function() {
return gulp.src('js/entries/plugins/foundation.core.js')
.pipe(named())
.pipe(sourcemaps.init())
.pipe(webpackStream(Object.assign({}, webpackConfig, {
output: webpackOutputAsExternal,
}), webpack))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('_build/assets/js/plugins'));
});
gulp.task('javascript:plugins', gulp.series('javascript:plugin-core', function () {
return gulp.src(['js/entries/plugins/*.js', '!js/entries/plugins/foundation.core.js'])
.pipe(named())
.pipe(sourcemaps.init())
.pipe(webpackStream(Object.assign({}, webpackConfig, {
externals: webpackExternalPlugins,
output: webpackOutputAsExternal,
}), webpack))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('_build/assets/js/plugins'));
}));
gulp.task('javascript:foundation', gulp.series('javascript:plugins', function() {
return gulp.src('js/entries/foundation.js')
.pipe(named())
.pipe(sourcemaps.init())
.pipe(webpackStream(webpackConfig, webpack))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('_build/assets/js'));
}));
gulp.task('javascript:deps', function() {
return gulp.src(CONFIG.JS_DEPS)
.pipe(concat('vendor.js'))
.pipe(gulp.dest('_build/assets/js'));
});
gulp.task('javascript:docs', function() {
return gulp.src(CONFIG.JS_DOCS)
.pipe(concat('docs.js'))
.pipe(gulp.dest('_build/assets/js'));
});