react-rails-starterkit
Version:
React on Rails starter kit
180 lines (158 loc) • 4.81 kB
JavaScript
require("regenerator/runtime");
var gulp = require("gulp");
var gutil = require("gulp-util");
var source = require("vinyl-source-stream");
var buffer = require("vinyl-buffer");
var plumber = require("gulp-plumber");
var rename = require("gulp-rename");
var browserify = require("browserify");
var envify = require("envify/custom");
var jshint = require("gulp-jshint");
var stylish = require("jshint-stylish");
var uglify = require("gulp-uglify");
var esnext = require("gulp-esnext");
var react = require("gulp-react");
var del = require("del");
var _ = require("lodash");
var R = require("react-rails");
var postcss = require("gulp-postcss");
var imagemin = require("gulp-imagemin");
var merge = require("merge-stream");
var createComponent = require("./tasks/createComponent");
var config = require("./config");
var dev = config.install.mode !== "production";
var prod = !dev;
var style = require("gulp-react-rails-style")(R, dev ? [R.Style.Processors.autoprefixer] : [R.Style.Processors.autoprefixer, R.Style.Processors.min]);
var statics = [
"node_modules/normalize.css/normalize.css",
];
var jshintOptions = {
globals: {
Promise: true,
},
esnext: true,
};
var bustConfig = function bustConfig() {
var module = require.resolve("./config");
if(require.cache[module]) {
delete require.cache[module];
require("./config");
};
return Promise.resolve(void 0);
};
var browserifyClient = function browserifyClient() {
var b = browserify({
fullPaths: false,
entries: ["./dist/client.js"],
debug: dev,
ignoreMissing: ["promise"],
});
var NODE_ENV = prod ? "production": "development";
b.transform("brfs");
b.transform(envify({
NODE_ENV: NODE_ENV,
}));
return b.bundle()
.pipe(plumber())
.pipe(source("client.js"))
.pipe(buffer())
.pipe(prod ? uglify() : gutil.noop())
.pipe(gulp.dest("./static"));
};
var lintJS = function lintJS() {
return gulp.src("src/**/*.js")
.pipe(plumber())
.pipe(jshint(jshintOptions))
.pipe(jshint.reporter(stylish));
};
var lintJSX = function lintJSX() {
return gulp.src("src/**/*.jsx")
.pipe(plumber())
.pipe(react())
.pipe(jshint(jshintOptions))
.pipe(jshint.reporter(stylish));
};
var lint = function lint() {
return merge(lintJS(), lintJSX());
};
var compileSources = function compileSources() {
return gulp.src(["src/**/*.js", "src/**/*.jsx"])
.pipe(plumber())
.pipe(react())
.pipe(rename({
extname: ".js",
}))
.pipe(esnext())
.pipe(gulp.dest("dist"));
};
var copyTemplates = function copyTemplates() {
return gulp.src("src/**/*.tpl")
.pipe(plumber())
.pipe(gulp.dest("dist"));
};
var copyStatics = function copyStatics() {
return gulp.src(statics)
.pipe(plumber())
.pipe(gulp.dest("static"));
};
var compileStyles = function compileStyles() {
return gulp.src("dist/components/*.js")
.pipe(plumber())
.pipe(style(__dirname + "/dist/globals"))
.pipe(postcss([]))
.pipe(gulp.dest("static"))
};
var promisify = function promisify(stream, name) {
return new Promise(function(resolve, reject) {
gutil.log("Starting " + name + "...");
stream
.on("error", reject)
.on("end", function() {
gutil.log("Finished " + name + ".");
})
.on("end", resolve);
});
};
gulp.task("build", function(done) {
promisify(lint(), "lint")
.then(function() {
return bustConfig();
})
.then(function() {
return Promise.all([
promisify(compileSources(), "compileSources"),
promisify(copyTemplates(), "copyTemplates"),
promisify(copyStatics(), "copyStatics"),
]);
})
.then(function() {
return Promise.all([
promisify(compileStyles(), "compileStyles"),
promisify(browserifyClient(), "browserifyClient"),
]);
})
.then(function() {
done(null);
})
.catch(function(err) {
gutil.log("Build error", err);
done(null);
});
});
gulp.task("clean", function() {
del(["dist"]);
});
gulp.task("watch", function() {
gulp.watch(["src/**/*", "config.js"], ["build"]);
gulp.watch("images/**/*", ["imagemin"]);
});
gulp.task("component", function() {
createComponent(gutil.env.displayName, gutil.env.tagName);
});
gulp.task("imagemin", function() {
gulp.src(["images/*.{png,jpg,gif,svg}"])
.pipe(plumber())
.pipe(imagemin())
.pipe(gulp.dest("static"));
});
gulp.task("default", ["build", "imagemin"]);