gulp
This commit is contained in:
parent
be9df84028
commit
ccdff0e55c
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
node_modules/
|
295
gulpfile.js
Normal file
295
gulpfile.js
Normal file
@ -0,0 +1,295 @@
|
|||||||
|
/**
|
||||||
|
* Settings
|
||||||
|
* Turn on/off build features
|
||||||
|
*/
|
||||||
|
|
||||||
|
var settings = {
|
||||||
|
clean: true,
|
||||||
|
scripts: true,
|
||||||
|
polyfills: true,
|
||||||
|
styles: true,
|
||||||
|
svgs: true,
|
||||||
|
copy: true,
|
||||||
|
reload: true
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paths to project folders
|
||||||
|
*/
|
||||||
|
|
||||||
|
var paths = {
|
||||||
|
input: 'src/',
|
||||||
|
output: 'dist/',
|
||||||
|
scripts: {
|
||||||
|
input: 'src/js/*',
|
||||||
|
polyfills: '.polyfill.js',
|
||||||
|
output: 'dist/js/'
|
||||||
|
},
|
||||||
|
styles: {
|
||||||
|
input: 'src/sass/**/*.{scss,sass}',
|
||||||
|
output: 'dist/css/'
|
||||||
|
},
|
||||||
|
svgs: {
|
||||||
|
input: 'src/svg/*.svg',
|
||||||
|
output: 'dist/svg/'
|
||||||
|
},
|
||||||
|
copy: {
|
||||||
|
input: 'src/copy/**/*',
|
||||||
|
output: 'dist/'
|
||||||
|
},
|
||||||
|
reload: './dist/'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template for banner to add to file headers
|
||||||
|
*/
|
||||||
|
|
||||||
|
var banner = {
|
||||||
|
main:
|
||||||
|
'/*!' +
|
||||||
|
' <%= package.name %> v<%= package.version %>' +
|
||||||
|
' | (c) ' + new Date().getFullYear() + ' <%= package.author.name %>' +
|
||||||
|
' | <%= package.license %> License' +
|
||||||
|
' | <%= package.repository.url %>' +
|
||||||
|
' */\n'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gulp Packages
|
||||||
|
*/
|
||||||
|
|
||||||
|
// General
|
||||||
|
var {gulp, src, dest, watch, series, parallel} = require('gulp');
|
||||||
|
var del = require('del');
|
||||||
|
var flatmap = require('gulp-flatmap');
|
||||||
|
var lazypipe = require('lazypipe');
|
||||||
|
var rename = require('gulp-rename');
|
||||||
|
var header = require('gulp-header');
|
||||||
|
var package = require('./package.json');
|
||||||
|
|
||||||
|
// Scripts
|
||||||
|
var jshint = require('gulp-jshint');
|
||||||
|
var stylish = require('jshint-stylish');
|
||||||
|
var concat = require('gulp-concat');
|
||||||
|
var uglify = require('gulp-terser');
|
||||||
|
var optimizejs = require('gulp-optimize-js');
|
||||||
|
|
||||||
|
// Styles
|
||||||
|
var sass = require('gulp-sass');
|
||||||
|
var postcss = require('gulp-postcss');
|
||||||
|
var prefix = require('autoprefixer');
|
||||||
|
var minify = require('cssnano');
|
||||||
|
|
||||||
|
// SVGs
|
||||||
|
var svgmin = require('gulp-svgmin');
|
||||||
|
|
||||||
|
// BrowserSync
|
||||||
|
var browserSync = require('browser-sync');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gulp Tasks
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Remove pre-existing content from output folders
|
||||||
|
var cleanDist = function (done) {
|
||||||
|
|
||||||
|
// Make sure this feature is activated before running
|
||||||
|
if (!settings.clean) return done();
|
||||||
|
|
||||||
|
// Clean the dist folder
|
||||||
|
del.sync([
|
||||||
|
paths.output
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Signal completion
|
||||||
|
return done();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Repeated JavaScript tasks
|
||||||
|
var jsTasks = lazypipe()
|
||||||
|
.pipe(header, banner.main, {package: package})
|
||||||
|
.pipe(optimizejs)
|
||||||
|
.pipe(dest, paths.scripts.output)
|
||||||
|
.pipe(rename, {suffix: '.min'})
|
||||||
|
.pipe(uglify)
|
||||||
|
.pipe(optimizejs)
|
||||||
|
.pipe(header, banner.main, {package: package})
|
||||||
|
.pipe(dest, paths.scripts.output);
|
||||||
|
|
||||||
|
// Lint, minify, and concatenate scripts
|
||||||
|
var buildScripts = function (done) {
|
||||||
|
|
||||||
|
// Make sure this feature is activated before running
|
||||||
|
if (!settings.scripts) return done();
|
||||||
|
|
||||||
|
// Run tasks on script files
|
||||||
|
return src(paths.scripts.input)
|
||||||
|
.pipe(flatmap(function(stream, file) {
|
||||||
|
|
||||||
|
// If the file is a directory
|
||||||
|
if (file.isDirectory()) {
|
||||||
|
|
||||||
|
// Setup a suffix variable
|
||||||
|
var suffix = '';
|
||||||
|
|
||||||
|
// If separate polyfill files enabled
|
||||||
|
if (settings.polyfills) {
|
||||||
|
|
||||||
|
// Update the suffix
|
||||||
|
suffix = '.polyfills';
|
||||||
|
|
||||||
|
// Grab files that aren't polyfills, concatenate them, and process them
|
||||||
|
src([file.path + '/*.js', '!' + file.path + '/*' + paths.scripts.polyfills])
|
||||||
|
.pipe(concat(file.relative + '.js'))
|
||||||
|
.pipe(jsTasks());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Grab all files and concatenate them
|
||||||
|
// If separate polyfills enabled, this will have .polyfills in the filename
|
||||||
|
src(file.path + '/*.js')
|
||||||
|
.pipe(concat(file.relative + suffix + '.js'))
|
||||||
|
.pipe(jsTasks());
|
||||||
|
|
||||||
|
return stream;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, process the file
|
||||||
|
return stream.pipe(jsTasks());
|
||||||
|
|
||||||
|
}));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Lint scripts
|
||||||
|
var lintScripts = function (done) {
|
||||||
|
|
||||||
|
// Make sure this feature is activated before running
|
||||||
|
if (!settings.scripts) return done();
|
||||||
|
|
||||||
|
// Lint scripts
|
||||||
|
return src(paths.scripts.input)
|
||||||
|
.pipe(jshint())
|
||||||
|
.pipe(jshint.reporter('jshint-stylish'));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Process, lint, and minify Sass files
|
||||||
|
var buildStyles = function (done) {
|
||||||
|
|
||||||
|
// Make sure this feature is activated before running
|
||||||
|
if (!settings.styles) return done();
|
||||||
|
|
||||||
|
// Run tasks on all Sass files
|
||||||
|
return src(paths.styles.input)
|
||||||
|
.pipe(sass({
|
||||||
|
outputStyle: 'expanded',
|
||||||
|
sourceComments: true
|
||||||
|
}))
|
||||||
|
.pipe(postcss([
|
||||||
|
prefix({
|
||||||
|
cascade: true,
|
||||||
|
remove: true
|
||||||
|
})
|
||||||
|
]))
|
||||||
|
.pipe(header(banner.main, {package: package}))
|
||||||
|
.pipe(dest(paths.styles.output))
|
||||||
|
.pipe(rename({suffix: '.min'}))
|
||||||
|
.pipe(postcss([
|
||||||
|
minify({
|
||||||
|
discardComments: {
|
||||||
|
removeAll: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
]))
|
||||||
|
.pipe(dest(paths.styles.output));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Optimize SVG files
|
||||||
|
var buildSVGs = function (done) {
|
||||||
|
|
||||||
|
// Make sure this feature is activated before running
|
||||||
|
if (!settings.svgs) return done();
|
||||||
|
|
||||||
|
// Optimize SVG files
|
||||||
|
return src(paths.svgs.input)
|
||||||
|
.pipe(svgmin())
|
||||||
|
.pipe(dest(paths.svgs.output));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Copy static files into output folder
|
||||||
|
var copyFiles = function (done) {
|
||||||
|
|
||||||
|
// Make sure this feature is activated before running
|
||||||
|
if (!settings.copy) return done();
|
||||||
|
|
||||||
|
// Copy static files
|
||||||
|
return src(paths.copy.input)
|
||||||
|
.pipe(dest(paths.copy.output));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Watch for changes to the src directory
|
||||||
|
var startServer = function (done) {
|
||||||
|
|
||||||
|
// Make sure this feature is activated before running
|
||||||
|
if (!settings.reload) return done();
|
||||||
|
|
||||||
|
// Initialize BrowserSync
|
||||||
|
browserSync.init({
|
||||||
|
server: {
|
||||||
|
baseDir: paths.reload
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Signal completion
|
||||||
|
done();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Reload the browser when files change
|
||||||
|
var reloadBrowser = function (done) {
|
||||||
|
if (!settings.reload) return done();
|
||||||
|
browserSync.reload();
|
||||||
|
done();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Watch for changes
|
||||||
|
var watchSource = function (done) {
|
||||||
|
watch(paths.input, series(exports.default, reloadBrowser));
|
||||||
|
done();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export Tasks
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Default task
|
||||||
|
// gulp
|
||||||
|
exports.default = series(
|
||||||
|
cleanDist,
|
||||||
|
parallel(
|
||||||
|
buildScripts,
|
||||||
|
lintScripts,
|
||||||
|
buildStyles,
|
||||||
|
buildSVGs,
|
||||||
|
copyFiles
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Watch and reload
|
||||||
|
// gulp watch
|
||||||
|
exports.watch = series(
|
||||||
|
exports.default,
|
||||||
|
startServer,
|
||||||
|
watchSource
|
||||||
|
);
|
3453
package-lock.json
generated
Normal file
3453
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
45
package.json
Normal file
45
package.json
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"name": "Meritkollen",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Den enkla meritkalkylatorn",
|
||||||
|
"main": "./dist/your-main-js-file.js",
|
||||||
|
"author": {
|
||||||
|
"name": "Felix Schulze",
|
||||||
|
"url": "https://meritkollen.se"
|
||||||
|
},
|
||||||
|
"license": "AGPL-3.0",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/thefeli73/meritkollen.git"
|
||||||
|
},
|
||||||
|
"boilerplate": {
|
||||||
|
"version": "2.2.5",
|
||||||
|
"author": "Chris Ferdinandi",
|
||||||
|
"url": "https://gomakethings.com",
|
||||||
|
"repo": "http://github.com/cferdinandi/gulp-boilerplate"
|
||||||
|
},
|
||||||
|
"browserslist": [
|
||||||
|
"last 2 versions",
|
||||||
|
"> 0.25%"
|
||||||
|
],
|
||||||
|
"devDependencies": {
|
||||||
|
"autoprefixer": "9.6.1",
|
||||||
|
"browser-sync": "2.26.7",
|
||||||
|
"cssnano": "4.1.10",
|
||||||
|
"del": "3.0.0",
|
||||||
|
"gulp": "^4.0.2",
|
||||||
|
"gulp-concat": "2.6.1",
|
||||||
|
"gulp-flatmap": "1.0.2",
|
||||||
|
"gulp-header": "2.0.5",
|
||||||
|
"gulp-jshint": "2.1.0",
|
||||||
|
"gulp-optimize-js": "1.1.0",
|
||||||
|
"gulp-postcss": "8.0.0",
|
||||||
|
"gulp-rename": "1.4.0",
|
||||||
|
"gulp-sass": "4.0.2",
|
||||||
|
"gulp-svgmin": "2.1.0",
|
||||||
|
"gulp-terser": "1.1.7",
|
||||||
|
"jshint": "2.9.6",
|
||||||
|
"jshint-stylish": "2.2.1",
|
||||||
|
"lazypipe": "1.0.1"
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user