123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- 'use strict';
- var gulp = require('gulp');
- var gutil = require('gulp-util');
- var babelify = require('babelify');
- var browserify = require('browserify');
- var buffer = require('vinyl-buffer');
- var eslint = require('gulp-eslint');
- var image = require('gulp-image');
- var less = require('gulp-less');
- var cleanCss = require('gulp-clean-css');
- var rename = require('gulp-rename');
- var source = require('vinyl-source-stream');
- var sourcemaps = require('gulp-sourcemaps');
- var uglify = require('gulp-uglify');
- var watchify = require('watchify');
- var fs = require('fs');
- var glob = require('glob');
- var del = require('del');
- var misago = '../misago/static/misago/';
- // Source tasks
- function getSources() {
- var sources = ['src/index.js'];
- function include(pattern) {
- var paths = glob.sync(pattern);
- paths.forEach(function(path) {
- sources.push(path);
- });
- };
- include('src/initializers/*.js');
- include('src/initializers/**/*.js');
- return sources.map(function(path) {
- return path;
- });
- };
- function lintjsapp() {
- return gulp.src('src/**/*.js')
- .pipe(eslint({
- 'parser': 'babel-eslint',
- 'parserOptions': {
- 'ecmaVersion': 7,
- 'sourceType': 'module',
- 'ecmaFeatures': {
- 'jsx': true
- }
- },
- rules: {
- "semi": ["error", "never"],
- "no-undef": "error",
- "strict": 2
- },
- globals: [
- "gettext",
- "ngettext",
- "interpolate",
- "misago",
- "hljs"
- ],
- envs: [
- "browser",
- "jquery",
- "node",
- "es6"
- ]
- }))
- .pipe(eslint.format());
- };
- function fastsource() {
- process.env.NODE_ENV = 'development';
- return browserify({
- entries: getSources(),
- debug: true,
- })
- .external('moment')
- .external('cropit')
- .external('react')
- .external('react-dom')
- .external('react-router')
- .external('redux')
- .external('react-redux')
- .transform(babelify)
- .bundle()
- .pipe(source('misago.js'))
- .pipe(buffer())
- .pipe(gulp.dest(misago + 'js'));
- };
- function watchifybuild() {
- process.env.NODE_ENV = 'development';
- var b = browserify({
- entries: getSources(),
- debug: true,
- cache: {},
- packageCache: {}
- })
- .plugin(watchify, {
- delay: 100,
- poll: true
- })
- .external('moment')
- .external('cropit')
- .external('react')
- .external('react-dom')
- .external('react-router')
- .external('redux')
- .external('react-redux')
- .transform(babelify)
- .on('error', function(err) {
- gutil.log(gutil.colors.red(err.toString() + '\n' + err.codeFrame));
- this.emit('end');
- });
- function bundle() {
- b.bundle()
- .on('error', function(err) {
- gutil.log(gutil.colors.red(err.toString() + '\n' + err.codeFrame));
- this.emit('end');
- })
- .pipe(fs.createWriteStream(misago + 'js/misago.js'));
- }
- b.on('update', bundle);
- bundle();
- b.on('log', function (msg) {
- gutil.log(gutil.colors.cyan('watchify:'), msg);
- });
- }
- function jsapp() {
- process.env.NODE_ENV = 'production';
- return browserify({
- entries: getSources(),
- debug: false
- })
- .external('moment')
- .external('cropit')
- .external('react')
- .external('react-dom')
- .external('react-router')
- .external('redux')
- .external('react-redux')
- .transform(babelify, { sourceMaps: true })
- .bundle()
- .pipe(source('misago.js'))
- .pipe(buffer())
- .pipe(sourcemaps.init({ loadMaps: true }))
- .pipe(uglify())
- .pipe(sourcemaps.write('./'))
- .pipe(gulp.dest(misago + 'js'));
- };
- // Styles tasks
- function cleanstyle() {
- return del(misago + 'css', {force: true});
- };
- function faststyle() {
- return gulp.src('style/index.less')
- .pipe(less().on('error', function(err) {
- gutil.log(gutil.colors.red(err.toString()));
- this.emit('end');
- }))
- .pipe(rename('misago.css'))
- .pipe(gulp.dest(misago + 'css'));
- };
- function style() {
- return gulp.src('style/index.less')
- .pipe(less())
- .pipe(cleanCss({compatibility: 'ie11'}))
- .pipe(rename('misago.css'))
- .pipe(gulp.dest(misago + 'css'));
- };
- // Static tasks
- function copyfonts() {
- return gulp.src('static/fonts/**/*')
- .pipe(gulp.dest(misago + 'fonts'));
- };
- function copyimages() {
- return gulp.src('static/img/**/*')
- .pipe(image())
- .pipe(gulp.dest(misago + 'img'));
- };
- const statics = gulp.parallel(copyfonts, copyimages);
- // Vendor tasks
- function vendors() {
- process.env.NODE_ENV = 'production';
- return browserify({
- entries: 'src/vendor.js',
- debug: false
- })
- .transform('browserify-shim')
- .require('moment')
- .require('cropit')
- .require('react')
- .require('react-dom')
- .require('react-router')
- .require('redux')
- .require('react-redux')
- .transform(babelify, { sourceMaps: true })
- .bundle()
- .pipe(source('vendor.js'))
- .pipe(buffer())
- .pipe(sourcemaps.init({ loadMaps: true }))
- .pipe(uglify())
- .pipe(sourcemaps.write('./'))
- .pipe(gulp.dest(misago + 'js'));
- };
- function copyzxcvbn() {
- return gulp.src('node_modules/zxcvbn/dist/*')
- .pipe(gulp.dest(misago + 'js'));
- };
- // Watchers
- function watchjs() {
- gulp.watch('src/**/*.js', gulp.series(lintjsapp, watchifybuild));
- }
- function watchstyle() {
- gulp.watch('style/**/*.less', faststyle);
- }
- // Entry points
- const buildstyle = gulp.series(cleanstyle, style);
- const buildjsapp = gulp.series(lintjsapp, jsapp);
- const build = gulp.parallel(
- buildstyle,
- statics,
- buildjsapp,
- vendors,
- copyzxcvbn
- )
- const watch = gulp.series(
- watchjs,
- watchstyle,
- )
- module.exports = {
- build,
- watch,
- watchstyle,
- lint: lintjsapp,
- }
|