diff --git a/.babelrc b/.babelrc index 758df2a..fbb903a 100644 --- a/.babelrc +++ b/.babelrc @@ -1,4 +1,4 @@ { - "presets": ["es2015"], + "presets": [ "@babel/preset-env" ], "compact": false } diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..3739808 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,5 @@ +# Browsers that we support +last 2 versions +ie >= 9 +ios >= 7 +android >= 4.4 diff --git a/gulpfile.babel.js b/gulpfile.babel.js index 4efecda..130a8e2 100644 --- a/gulpfile.babel.js +++ b/gulpfile.babel.js @@ -1,159 +1,165 @@ 'use strict'; import plugins from 'gulp-load-plugins'; import yargs from 'yargs'; import browser from 'browser-sync'; import gulp from 'gulp'; import panini from 'panini'; import rimraf from 'rimraf'; import sherpa from 'style-sherpa'; import yaml from 'js-yaml'; import fs from 'fs'; import webpackStream from 'webpack-stream'; import webpack2 from 'webpack'; import named from 'vinyl-named'; // Load all Gulp plugins into one variable const $ = plugins(); // Check for --production flag const PRODUCTION = !!(yargs.argv.production); // Load settings from settings.yml const { COMPATIBILITY, PORT, UNCSS_OPTIONS, PATHS } = loadConfig(); function loadConfig() { let ymlFile = fs.readFileSync('config.yml', 'utf8'); return yaml.load(ymlFile); } // Build the "dist" folder by running all of the below tasks gulp.task('build', gulp.series(clean, gulp.parallel(pages, sass, javascript, images, copy), styleGuide)); // Build the site, run the server, and watch for file changes gulp.task('default', gulp.series('build', server, watch)); // Delete the "dist" folder // This happens every time a build starts function clean(done) { rimraf(PATHS.dist, done); } // Copy files out of the assets folder // This task skips over the "img", "js", and "scss" folders, which are parsed separately function copy() { return gulp.src(PATHS.assets) .pipe(gulp.dest(PATHS.dist + '/assets')); } // Copy page templates into finished HTML files function pages() { return gulp.src('src/pages/**/*.{html,hbs,handlebars}') .pipe(panini({ root: 'src/pages/', layouts: 'src/layouts/', partials: 'src/partials/', data: 'src/data/', helpers: 'src/helpers/' })) .pipe(gulp.dest(PATHS.dist)); } // Load updated HTML templates and partials into Panini function resetPages(done) { panini.refresh(); done(); } // Generate a style guide from the Markdown content and HTML template in styleguide/ function styleGuide(done) { sherpa('src/styleguide/index.md', { output: PATHS.dist + '/styleguide.html', template: 'src/styleguide/template.html' }, done); } // Compile Sass into CSS // In production, the CSS is compressed function sass() { return gulp.src('src/assets/scss/app.scss') .pipe($.sourcemaps.init()) .pipe($.sass({ includePaths: PATHS.sass }) .on('error', $.sass.logError)) .pipe($.autoprefixer({ browsers: COMPATIBILITY })) // Comment in the pipe below to run UnCSS in production - //.pipe($.if(PRODUCTION, $.uncss(UNCSS_OPTIONS))) + // .pipe($.if(PRODUCTION, $.postcss([ + // $.uncss.postcssPlugin(UNCSS_OPTIONS) + // ]))) .pipe($.if(PRODUCTION, $.cleanCss({ compatibility: 'ie9' }))) .pipe($.if(!PRODUCTION, $.sourcemaps.write())) .pipe(gulp.dest(PATHS.dist + '/assets/css')) .pipe(browser.reload({ stream: true })); } let webpackConfig = { + mode: (PRODUCTION ? 'production' : 'development'), module: { rules: [ { - test: /.js$/, - use: [ - { - loader: 'babel-loader' + test: /\.js$/, + use: { + loader: 'babel-loader', + options: { + presets: ["@babel/preset-env"], + compact: false } - ] + } } ] } } + // Combine JavaScript into one file // In production, the file is minified function javascript() { return gulp.src(PATHS.entries) .pipe(named()) .pipe($.sourcemaps.init()) .pipe(webpackStream(webpackConfig, webpack2)) .pipe($.if(PRODUCTION, $.uglify() .on('error', e => { console.log(e); }) )) .pipe($.if(!PRODUCTION, $.sourcemaps.write())) .pipe(gulp.dest(PATHS.dist + '/assets/js')); } // Copy images to the "dist" folder // In production, the images are compressed function images() { return gulp.src('src/assets/img/**/*') .pipe($.if(PRODUCTION, $.imagemin({ progressive: true }))) .pipe(gulp.dest(PATHS.dist + '/assets/img')); } // Start a server with BrowserSync to preview the site in function server(done) { browser.init({ server: PATHS.dist, port: PORT }); done(); } // Reload the browser with BrowserSync function reload(done) { browser.reload(); done(); } // Watch for changes to static assets, pages, Sass, and JavaScript function watch() { gulp.watch(PATHS.assets, copy); gulp.watch('src/pages/**/*.html').on('all', gulp.series(pages, browser.reload)); gulp.watch('src/{layouts,partials}/**/*.html').on('all', gulp.series(resetPages, pages, browser.reload)); gulp.watch('src/assets/scss/**/*.scss').on('all', sass); gulp.watch('src/assets/js/**/*.js').on('all', gulp.series(javascript, browser.reload)); gulp.watch('src/assets/img/**/*').on('all', gulp.series(images, browser.reload)); gulp.watch('src/styleguide/**').on('all', gulp.series(styleGuide, browser.reload)); } diff --git a/package.json b/package.json index ca73d1c..208e671 100644 --- a/package.json +++ b/package.json @@ -1,61 +1,56 @@ { "name": "foundation-zurb-template", "version": "1.0.0", "description": "Official ZURB Template for Foundation for Sites.", "main": "gulpfile.js", "scripts": { "start": "gulp", "build": "gulp build --production" }, "author": "ZURB ", "license": "MIT", "dependencies": { "foundation-sites": "~6.4.1", "jquery": ">=3.0.0", "what-input": "^4.1.3", "motion-ui": "~2.0.3" }, "devDependencies": { - "babel-core": "^6.24.1", - "babel-loader": "^6.4.1", - "babel-preset-es2015": "^6.3.13", - "babel-register": "^6.7.2", + "@babel/core": "^7.1.2", + "@babel/preset-env": "^7.1.0", + "@babel/register": "^7.0.0", + "babel-loader": "^8.0.4", "browser-sync": "^2.10.0", "gulp": "github:gulpjs/gulp#4.0", "gulp-autoprefixer": "^6.0.0", - "gulp-babel": "^6.1.2", + "gulp-babel": "^8.0.0", "gulp-clean-css": "^3.3.1", "gulp-cli": "^2.0.1", "gulp-concat": "^2.5.2", "gulp-extname": "^0.2.0", "gulp-if": "^2.0.0", "gulp-imagemin": "^4.1.0", "gulp-load-plugins": "^1.1.0", "gulp-sass": "^4.0.1", "gulp-sourcemaps": "^1.6.0", - "gulp-uglify": "^1.2.0", - "gulp-uncss": "^1.0.1", + "gulp-uglify": "^3.0.1", + "gulp-postcss": "^8.0.0", "js-yaml": "^3.4.6", "panini": "^1.3.0", "rimraf": "^2.4.3", "style-sherpa": "^1.0.0", "vinyl-named": "^1.1.0", - "webpack": "^2.6.1", - "webpack-stream": "^3.2.0", + "webpack": "^4.20.2", + "webpack-stream": "^5.1.1", "yargs": "^3.8.0" }, "repository": { "type": "git", "url": "https://github.com/zurb/foundation-zurb-template.git" }, "bugs": { "url": "https://github.com/zurb/foundation-sites/issues", "email": "foundation@zurb.com" }, - "babel": { - "presets": [ - "es2015" - ] - }, "private": true }