'use strict'; var watchify = require('watchify'); var browserify = require('browserify'); var assign = require('lodash.assign'); var gulp = require('gulp'); var source = require('vinyl-source-stream'); var buffer = require('vinyl-buffer'); var uglify = require('gulp-uglify-es').default; var gettext = require('gulp-gettext'); var postcss = require('gulp-postcss'); var sourcemaps = require('gulp-sourcemaps'); var sass = require('gulp-sass'); var autoprefixer = require('autoprefixer'); // This guy requires gulp-cli var log = require('gulplog'); var sassOptions = { errLogToConsole: true, outputStyle: 'expanded', }; var sassProdOptions = { errLogToConsole: true, outputStyle: 'compressed', }; var apOptions = { browsers: ['last 2 versions', 'ie >= 9'] }; // add custom browserify options here var browserifyOpts = { entries: ['portal/static/portal/js/entry.js'], debug: true }; var opts = assign({}, watchify.args, browserifyOpts); var b = watchify(browserify(opts)); function bundle() { return b.bundle() // log errors if they happen .on('error', log.error.bind(log, 'Browserify Error')) .pipe(source('bundle.js')) // optional, remove if you don't need to buffer file contents .pipe(buffer()) // optional, remove if you dont want sourcemaps .pipe(sourcemaps.init({loadMaps: true})) // loads map from browserify file .pipe(sourcemaps.write('./')) // writes .map file .pipe(gulp.dest('portal/static/portal/dist/js')); } gulp.task('javascript', bundle); // so you can run `gulp js` to build the file gulp.task('javascript-prod', () => { browserify(browserifyOpts) .bundle() .pipe(source('bundle.js')) // optional, remove if you don't need to buffer file contents .pipe(buffer()) .pipe(uglify()) .on('error', log.error.bind(log, 'Uglify Error')) .pipe(gulp.dest('portal/static/bclq_lims/dist/js')); }); gulp.task('sass', function() { return gulp.src('portal/static/portal/scss/app.scss') .pipe(sourcemaps.init()) .pipe(sass(sassOptions).on('error', sass.logError)) .pipe(postcss([autoprefixer(apOptions), require('postcss-flexbugs-fixes')])) .pipe(sourcemaps.write('.')) .pipe(gulp.dest('portal/static/portal/dist/css')); }); gulp.task('compile-po', () => { gulp.src('portal/locale/fr/LC_MESSAGES/*.po') .pipe(gettext()) .pipe(gulp.dest('portal/locale/fr/LC_MESSAGES/')) }); gulp.task('move-css', () => { gulp.src('node_modules/datatables.net-bs4/css/*.*') .pipe(gulp.dest('portal/static/portal/dist/css/')); gulp.src('node_modules/datatables.net-select-bs4/css/select.bootstrap4.min.css') .pipe(gulp.dest('portal/static/portal/dist/css/')); gulp.src('node_modules/dropzone/dist/min/basic.min.css') .pipe(gulp.dest('portal/static/portal/dist/css/')); gulp.src('node_modules/dropzone/dist/min/dropzone.min.css') .pipe(gulp.dest('portal/static/portal/dist/css/')); gulp.src('node_modules/tempusdominus-bootstrap-4/build/css/tempusdominus-bootstrap-4.min.css') .pipe(gulp.dest('portal/static/portal/dist/css/')); gulp.src('node_modules/select2/dist/css/select2.min.css') .pipe(gulp.dest('portal/static/portal/dist/css/')); gulp.src('node_modules/select2-bootstrap4-theme/dist/select2-bootstrap4.min.css') .pipe(gulp.dest('portal/static/portal/dist/css/')); }); gulp.task('move-images', function () { return gulp.src('portal/static/portal/images/*.*') .pipe(gulp.dest('portal/static/portal/dist/images/')); }); gulp.task('prod', ['sass', 'move-css', 'move-images', 'javascript-prod', 'compile-po']); gulp.task('default', ['sass', 'move-css', 'move-images', 'javascript', 'compile-po'], function() { gulp.watch(['portal/static/portal/scss/**/*.scss'], ['sass']); gulp.watch(['portal/locale/fr/LC_MESSAGES/django.po'], ['compile-po']); b.on('update', bundle); // on any dep update, runs the bundler b.on('log', log.info); });