194 lines
4.7 KiB
JavaScript
194 lines
4.7 KiB
JavaScript
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
import gulp from 'gulp';
|
|
|
|
// Load all gulp plugins automatically
|
|
// and attach them to the `plugins` object
|
|
import plugins from 'gulp-load-plugins';
|
|
|
|
// Temporary solution until gulp 4
|
|
// https://github.com/gulpjs/gulp/issues/355
|
|
import runSequence from 'run-sequence';
|
|
|
|
import archiver from 'archiver';
|
|
import glob from 'glob';
|
|
import del from 'del';
|
|
import ssri from 'ssri';
|
|
import modernizr from 'modernizr';
|
|
|
|
import pkg from './package.json';
|
|
import modernizrConfig from './modernizr-config.json';
|
|
|
|
|
|
const dirs = pkg['h5bp-configs'].directories;
|
|
|
|
// ---------------------------------------------------------------------
|
|
// | Helper tasks |
|
|
// ---------------------------------------------------------------------
|
|
|
|
gulp.task('archive:create_archive_dir', () => {
|
|
fs.mkdirSync(path.resolve(dirs.archive), '0755');
|
|
});
|
|
|
|
gulp.task('archive:zip', (done) => {
|
|
|
|
const archiveName = path.resolve(dirs.archive, `${pkg.name}_v${pkg.version}.zip`);
|
|
const zip = archiver('zip');
|
|
const files = glob.sync('**/*.*', {
|
|
'cwd': dirs.dist,
|
|
'dot': true // include hidden files
|
|
});
|
|
const output = fs.createWriteStream(archiveName);
|
|
|
|
zip.on('error', (error) => {
|
|
done();
|
|
throw error;
|
|
});
|
|
|
|
output.on('close', done);
|
|
|
|
files.forEach((file) => {
|
|
|
|
const filePath = path.resolve(dirs.dist, file);
|
|
|
|
// `zip.bulk` does not maintain the file
|
|
// permissions, so we need to add files individually
|
|
zip.append(fs.createReadStream(filePath), {
|
|
'name': file,
|
|
'mode': fs.statSync(filePath).mode
|
|
});
|
|
|
|
});
|
|
|
|
zip.pipe(output);
|
|
zip.finalize();
|
|
|
|
});
|
|
|
|
gulp.task('clean', (done) => {
|
|
del([
|
|
dirs.archive,
|
|
dirs.dist
|
|
]).then(() => {
|
|
done();
|
|
});
|
|
});
|
|
|
|
gulp.task('copy', [
|
|
'copy:.htaccess',
|
|
'copy:index.html',
|
|
'copy:jquery',
|
|
'copy:license',
|
|
'copy:main.css',
|
|
'copy:misc',
|
|
'copy:normalize'
|
|
]);
|
|
|
|
gulp.task('copy:.htaccess', () =>
|
|
gulp.src('node_modules/apache-server-configs/dist/.htaccess')
|
|
.pipe(plugins().replace(/# ErrorDocument/g, 'ErrorDocument'))
|
|
.pipe(gulp.dest(dirs.dist))
|
|
);
|
|
|
|
gulp.task('copy:index.html', () => {
|
|
const hash = ssri.fromData(
|
|
fs.readFileSync('node_modules/jquery/dist/jquery.min.js'),
|
|
{algorithms: ['sha256']}
|
|
);
|
|
let version = pkg.devDependencies.jquery;
|
|
let modernizrVersion = pkg.devDependencies.modernizr;
|
|
|
|
gulp.src(`${dirs.src}/index.html`)
|
|
.pipe(plugins().replace(/{{JQUERY_VERSION}}/g, version))
|
|
.pipe(plugins().replace(/{{MODERNIZR_VERSION}}/g, modernizrVersion))
|
|
.pipe(plugins().replace(/{{JQUERY_SRI_HASH}}/g, hash.toString()))
|
|
.pipe(gulp.dest(dirs.dist));
|
|
});
|
|
|
|
gulp.task('copy:jquery', () =>
|
|
gulp.src(['node_modules/jquery/dist/jquery.min.js'])
|
|
.pipe(plugins().rename(`jquery-${pkg.devDependencies.jquery}.min.js`))
|
|
.pipe(gulp.dest(`${dirs.dist}/js/vendor`))
|
|
);
|
|
|
|
gulp.task('copy:license', () =>
|
|
gulp.src('HTML5-Boilerplate-LICENSE.txt')
|
|
.pipe(gulp.dest(dirs.dist))
|
|
);
|
|
|
|
gulp.task('copy:main.css', () => {
|
|
const banner = `/*! HTML5 Boilerplate v${pkg.version} | ${pkg.license} License | ${pkg.homepage} */\n\n`;
|
|
|
|
gulp.src(`node_modules/main.css/dist/main.css`)
|
|
.pipe(plugins().header(banner))
|
|
.pipe(plugins().autoprefixer({
|
|
browsers: ['last 2 versions', 'ie >= 9', '> 1%'],
|
|
cascade: false
|
|
}))
|
|
.pipe(gulp.dest(`${dirs.dist}/css`));
|
|
});
|
|
|
|
gulp.task('copy:misc', () =>
|
|
gulp.src([
|
|
|
|
// Copy all files
|
|
`${dirs.src}/**/*`,
|
|
|
|
// Exclude the following files
|
|
// (other tasks will handle the copying of these files)
|
|
`!${dirs.src}/css/main.css`,
|
|
`!${dirs.src}/index.html`
|
|
|
|
], {
|
|
|
|
// Include hidden files by default
|
|
dot: true
|
|
|
|
}).pipe(gulp.dest(dirs.dist))
|
|
);
|
|
|
|
gulp.task('copy:normalize', () =>
|
|
gulp.src('node_modules/normalize.css/normalize.css')
|
|
.pipe(gulp.dest(`${dirs.dist}/css`))
|
|
);
|
|
|
|
gulp.task('modernizr', (done) =>{
|
|
|
|
modernizr.build(modernizrConfig, (code) => {
|
|
fs.writeFile(`${dirs.dist}/js/vendor/modernizr-${pkg.devDependencies.modernizr}.min.js`, code, done);
|
|
});
|
|
|
|
});
|
|
|
|
gulp.task('lint:js', () =>
|
|
gulp.src([
|
|
'gulpfile.js',
|
|
`${dirs.src}/js/*.js`,
|
|
`${dirs.test}/*.js`
|
|
]).pipe(plugins().jscs())
|
|
.pipe(plugins().eslint())
|
|
.pipe(plugins().eslint.failOnError())
|
|
);
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
// | Main tasks |
|
|
// ---------------------------------------------------------------------
|
|
|
|
gulp.task('archive', (done) => {
|
|
runSequence(
|
|
'build',
|
|
'archive:create_archive_dir',
|
|
'archive:zip',
|
|
done);
|
|
});
|
|
|
|
gulp.task('build', (done) => {
|
|
runSequence(
|
|
['clean', 'lint:js'],
|
|
'copy', 'modernizr',
|
|
done);
|
|
});
|
|
|
|
gulp.task('default', ['build']);
|