mirror of
https://github.com/zoriya/flood.git
synced 2025-12-21 06:35:14 +00:00
182 lines
4.3 KiB
JavaScript
182 lines
4.3 KiB
JavaScript
// dependencies
|
|
var autoprefixer = require('gulp-autoprefixer');
|
|
var browserSync = require('browser-sync');
|
|
var eslint = require('gulp-eslint');
|
|
var gulp = require('gulp');
|
|
var gulpif = require('gulp-if');
|
|
var gutil = require('gulp-util');
|
|
var imagemin = require('gulp-imagemin');
|
|
var minifyCSS = require('gulp-minify-css');
|
|
var sass = require('gulp-sass');
|
|
var sourcemaps = require('gulp-sourcemaps');
|
|
var uglify = require('gulp-uglify');
|
|
var webpack = require('webpack');
|
|
|
|
var packageInfo = require('./package');
|
|
|
|
var development = process.env.NODE_ENV === 'development';
|
|
|
|
var dirs = {
|
|
src: 'client/source',
|
|
dist: 'server/assets',
|
|
js: 'scripts',
|
|
jsDist: '',
|
|
styles: 'sass',
|
|
stylesDist: '',
|
|
img: 'images',
|
|
imgDist: 'images'
|
|
};
|
|
|
|
var files = {
|
|
mainJs: 'app',
|
|
mainJsDist: 'app',
|
|
mainStyles: 'style',
|
|
mainStylesDist: 'style'
|
|
};
|
|
|
|
var webpackDevtool = 'source-map';
|
|
var webpackWatch = false;
|
|
if (development) {
|
|
webpackDevtool = 'eval-source-map';
|
|
webpackWatch = true;
|
|
}
|
|
|
|
var webpackConfig = {
|
|
devtool: webpackDevtool,
|
|
entry: './' + dirs.src + '/' + dirs.js + '/' + files.mainJs + '.js',
|
|
output: {
|
|
filename: './' + dirs.dist + '/' + dirs.jsDist + '/' + files.mainJsDist + '.js'
|
|
},
|
|
module: {
|
|
loaders: [
|
|
{
|
|
test: /\.js$/,
|
|
loader: 'babel-loader?cacheDirectory'
|
|
}
|
|
],
|
|
preLoaders: [
|
|
{
|
|
test: /\.js$/,
|
|
loader: 'source-map-loader',
|
|
exclude: /node_modules/
|
|
}
|
|
],
|
|
postLoaders: [
|
|
{
|
|
loader: 'transform/cacheable?envify'
|
|
}
|
|
]
|
|
},
|
|
resolve: {
|
|
extensions: ['', '.js']
|
|
},
|
|
watch: webpackWatch
|
|
};
|
|
|
|
gulp.task('browsersync', function () {
|
|
browserSync.init({
|
|
online: true,
|
|
open: false,
|
|
port: 4200,
|
|
proxy: '127.0.0.1:3000'
|
|
});
|
|
});
|
|
|
|
// Create a function so we can use it inside of webpack's watch function.
|
|
function eslintFn () {
|
|
return gulp.src([dirs.js + '/**/*.?(js|jsx)'])
|
|
.pipe(eslint())
|
|
.pipe(eslint.formatEach('stylish', process.stderr));
|
|
};
|
|
|
|
gulp.task('eslint', eslintFn);
|
|
|
|
gulp.task('images', function () {
|
|
return gulp.src(dirs.src + '/' + dirs.img + '/**/*.*')
|
|
.pipe(imagemin({
|
|
progressive: true,
|
|
svgoPlugins: [{removeViewBox: false}]
|
|
}))
|
|
.pipe(gulp.dest(dirs.dist + '/' + dirs.imgDist));
|
|
});
|
|
|
|
gulp.task('sass', function () {
|
|
return gulp.src(dirs.src + '/' + dirs.styles + '/' + files.mainStyles + '.scss')
|
|
.pipe(gulpif(development, sourcemaps.init()))
|
|
.pipe(sass().on('error', function(error) {
|
|
gutil.log(
|
|
gutil.colors.green('Sass Error!\n'),
|
|
'\n',
|
|
error.messageFormatted,
|
|
'\n'
|
|
);
|
|
this.emit('end');
|
|
}))
|
|
.pipe(autoprefixer())
|
|
.pipe(gulpif(development, sourcemaps.write('.')))
|
|
.pipe(gulp.dest(dirs.dist + '/' + dirs.stylesDist))
|
|
.pipe(browserSync.stream({match: "**/*.css"}));
|
|
});
|
|
|
|
gulp.task('minify-css', ['sass'], function () {
|
|
return gulp.src(dirs.dist + '/' + dirs.stylesDist + '/' + files.mainStylesDist + '.css')
|
|
.pipe(minifyCSS())
|
|
.pipe(gulp.dest(dirs.dist + '/' + dirs.stylesDist));
|
|
});
|
|
|
|
gulp.task('minify-js', function () {
|
|
return gulp.src(dirs.dist + '/' + dirs.jsDist + '/' + files.mainJs + '.js')
|
|
.pipe(uglify({
|
|
mangle: true,
|
|
compress: true
|
|
}))
|
|
.pipe(gulp.dest(dirs.dist + '/' + dirs.jsDist));
|
|
});
|
|
|
|
gulp.task('reload', function () {
|
|
if (development) {
|
|
browserSync.reload();
|
|
}
|
|
});
|
|
|
|
gulp.task('watch', function () {
|
|
gulp.watch(dirs.src + '/' + dirs.styles + '/**/*.scss', ['sass']);
|
|
gulp.watch(dirs.src + '/' + dirs.img + '/**/*', ['images']);
|
|
});
|
|
|
|
gulp.task('webpack', function (callback) {
|
|
var isFirstRun = true;
|
|
|
|
webpack(webpackConfig, function (err, stats) {
|
|
if (err) {
|
|
throw new gutil.PluginError('webpack', err);
|
|
}
|
|
|
|
gutil.log('[webpack]', stats.toString({
|
|
children: false,
|
|
chunks: false,
|
|
colors: true,
|
|
modules: false,
|
|
timing: true
|
|
}));
|
|
|
|
if (isFirstRun) {
|
|
// This runs on initial gulp webpack load.
|
|
isFirstRun = false;
|
|
callback();
|
|
} else {
|
|
// This runs after webpack's internal watch rebuild.
|
|
// eslintFn();
|
|
if (development) {
|
|
browserSync.reload();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
gulp.task('default', ['webpack', 'sass', 'images', 'reload']);
|
|
|
|
gulp.task('dist', ['default', 'minify-css', 'minify-js']);
|
|
|
|
gulp.task('livereload', ['default', 'browsersync', 'watch']);
|