123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- '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 minify = require('gulp-minify-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/';
- // Entry points
- gulp.task('watch', ['watchifybuild'], function() {
- gulp.watch('style/**/*.less', ['faststyle']);
- });
- gulp.task('watchstyle', ['faststyle', 'faststatic'], function() {
- gulp.watch('style/**/*.less', ['faststyle']);
- });
- // Builds
- gulp.task('fastbuild', [
- 'fastsource',
- 'faststyle',
- 'faststatic',
- 'fastvendorsources',
- 'copypolyfill',
- 'copyzxcvbn'
- ]);
- gulp.task('build', [
- 'source',
- 'style',
- 'static',
- 'vendorsources',
- 'copypolyfill',
- 'copyzxcvbn'
- ]);
- // 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;
- });
- };
- gulp.task('lintsource', function() {
- 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());
- });
- gulp.task('fastsource', ['lintsource'], function() {
- 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'));
- });
- gulp.task('watchifybuild', ['fastbuild'], function() {
- 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);
- });
- })
- gulp.task('source', ['lintsource'], function() {
- 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)
- .bundle()
- .pipe(source('misago.js'))
- .pipe(buffer())
- .pipe(sourcemaps.init())
- .pipe(uglify())
- .pipe(sourcemaps.write('.'))
- .pipe(gulp.dest(misago + 'js'));
- });
- // Styles tasks
- gulp.task('cleanstyle', function(cb) {
- del(misago + 'css', cb);
- });
- gulp.task('faststyle', function() {
- 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'));
- });
- gulp.task('style', function() {
- return gulp.src('style/index.less')
- .pipe(less())
- .pipe(minify())
- .pipe(rename('misago.css'))
- .pipe(gulp.dest(misago + 'css'));
- });
- // Static tasks
- gulp.task('copyfonts', function(cb) {
- return gulp.src('static/fonts/**/*')
- .pipe(gulp.dest(misago + 'fonts'));
- });
- gulp.task('fastcopyimages', function() {
- return gulp.src('static/img/**/*')
- .pipe(gulp.dest(misago + 'img'));
- });
- gulp.task('copyimages', function() {
- return gulp.src('static/img/**/*')
- .pipe(image())
- .pipe(gulp.dest(misago + 'img'));
- });
- gulp.task('faststatic', ['copyfonts', 'fastcopyimages']);
- gulp.task('static', ['copyfonts', 'copyimages']);
- // Vendor tasks
- gulp.task('fastvendorsources', function() {
- process.env.NODE_ENV = 'development';
- return browserify({
- entries: 'src/vendor.js',
- debug: true
- })
- .transform('browserify-shim')
- .require('moment')
- .require('cropit')
- .require('react')
- .require('react-dom')
- .require('react-router')
- .require('redux')
- .require('react-redux')
- .bundle()
- .pipe(source('vendor.js'))
- .pipe(buffer())
- .pipe(gulp.dest(misago + 'js'));
- });
- gulp.task('vendorsources', function() {
- 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)
- .bundle()
- .pipe(source('vendor.js'))
- .pipe(buffer())
- .pipe(sourcemaps.init())
- .pipe(uglify())
- .pipe(sourcemaps.write('.'))
- .pipe(gulp.dest(misago + 'js'));
- });
- gulp.task('copyzxcvbn', function() {
- return gulp.src('node_modules/zxcvbn/dist/*')
- .pipe(gulp.dest(misago + 'js'));
- });
- gulp.task('copypolyfill', function() {
- return gulp.src('node_modules/babel-polyfill/dist/polyfill.js')
- .pipe(rename('es2015.js'))
- .pipe(buffer())
- .pipe(sourcemaps.init())
- .pipe(uglify())
- .pipe(sourcemaps.write('.'))
- .pipe(gulp.dest(misago + 'js'));
- });
|