Файл: flyfile.js
Строк: 106
<?php
var browserSync = require('browser-sync');
var isProd = false;
var isWatch = false;
var isServer = false;
var dest = 'dist';
var src = {
scripts: 'src/javascript/**/*.js',
styles: 'src/styles/**/*.{sass,scss}',
images: 'src/images/**/*.{jpg,png,svg}',
html: ['src/htdocs/*.html', 'src/htdocs/examples/*.html'],
vendor: 'src/javascript/_lib/*.js',
extras: ['src/htdocs/data/*']
};
exports.default = function * () {
/** @desc Default Task: `watch` */
yield this.start('watch');
};
exports.watch = function * () {
/** @desc Main Task: Starts a server & Recompiles files on change */
isWatch = true;
isProd = false;
yield this.start('clean');
yield this.watch(src.scripts, ['lint', 'scripts']);
yield this.watch(src.styles, 'styles');
yield this.watch(src.images, 'images');
yield this.watch(src.html, 'html');
yield this.start(['vendor', 'extras', 'serve']);
};
exports.build = function * () {
/** @desc Main Task: Build the production files */
isProd = true;
isWatch = false;
yield this.start('clean');
yield this.start(['lint', 'html', 'extras']);
yield this.start(['images', 'styles', 'scripts', 'vendor']);
};
// ###
// # Tasks
// ###
exports.clean = function * () {
/** @desc Delete all files in the `dist` directory */
yield this.clear(dest);
};
exports.lint = function * () {
/** @desc Lint javascript files */
yield this.source(src.scripts).xo({
env: 'browser',
globals: ['classie', 'Parallax'],
ignore: [src.vendor],
rules: {
curly: 0,
'one-var': 0,
'xo/filename-case': 0
}
});
};
exports.images = function * () {
/** @desc Compress and copy all images to `dist` */
yield this
.source(src.images)
.target(dest + '/img', {depth: 1});
reload();
};
exports.html = function * () {
/** @desc Compile all HTML files with Nunjucks. Will run `htmlmin` during `build` task. */
yield this.source(src.html)
.nunjucks({
base: 'src/htdocs'
})
.target(dest, {depth: 0});
return isProd ? yield this.start('htmlmin') : reload();
};
exports.htmlmin = function * () {
/** @desc Minify all HTML files already within `dist`. Production only */
yield this.source(dest + '/*.html')
.htmlmin({
removeComments: true,
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeAttributeQuotes: true,
removeRedundantAttributes: true,
removeEmptyAttributes: true,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
removeOptionalTags: true
})
.target(dest);
};
exports.vendor = function * () {
/** @desc Copy the Vendor JS files */
yield this.source(src.vendor)
.target(dest + '/js/vendor');
}
exports.extras = function * () {
/** @desc Copy extra fiels to `dest` root */
yield this.source(src.extras)
.target(dest);
}
exports.scripts = function * () {
/** @desc Compile javascript files with Browserify. Will run `uglify` during `build` task. */
yield this
.source('src/javascript/main.js')
.browserify()
.concat('bee3D.js')
.target(dest + '/js');
return isProd ? yield this.start('uglify') : reload();
};
exports.uglify = function * () {
/** @desc Minify all javascript files already within `dist` */
yield this.source(dest + '/js/*.js')
.uglify({
compress: {
conditionals: true,
comparisons: true,
booleans: true,
loops: true,
/* eslint camelcase: 0 */
join_vars: true,
drop_console: true
}
})
.target(dest + '/js');
};
exports.styles = function * () {
/** @desc Compile and prefix stylesheets with vendor properties */
yield this.source([
'src/styles/bee3D.sass',
'src/styles/demo.sass',
])
.sass({
indentedSyntax: true,
outputStyle: 'compressed',
includePaths: ['src/styles']
})
.autoprefixer({
browsers: [
'ie >= 10',
'ie_mob >= 10',
'ff >= 30',
'chrome >= 34',
'safari >= 7',
'opera >= 23',
'ios >= 7',
'android >= 4.4',
'bb >= 10'
]
})
.target(dest + '/css');
reload();
};
exports.serve = function * () {
/** @desc Launch a local server from the `dist` directory. */
isServer = true;
browserSync({
notify: false,
logPrefix: 'Fly',
server: {
baseDir: dest
}
});
};
// helper, reload browsersync
function reload() {
if (isWatch && isServer) {
browserSync.reload();
}
}
?>