gulpfile.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. "use strict";
  2. var gulp = require("gulp"),
  3. gutil = require("gulp-util"),
  4. plumber = require("gulp-plumber"),
  5. bower = require("gulp-bower"),
  6. peg = require("gulp-peg"),
  7. deploy = require("gulp-gh-pages"),
  8. babel = require("gulp-babel"),
  9. rename = require("gulp-rename"),
  10. uglify = require("gulp-uglify"),
  11. minifyCss = require("gulp-minify-css"),
  12. minifyHtml = require("gulp-minify-html"),
  13. concat = require("gulp-concat"),
  14. useref = require("gulp-useref"),
  15. gulpif = require("gulp-if"),
  16. ngAnnotate = require("gulp-ng-annotate"),
  17. ngHtml2Js = require("gulp-ng-html2js"),
  18. errLogger = gutil.log.bind(gutil, gutil.colors.red("Error: ")),
  19. opts = {
  20. buildDir: "build",
  21. };
  22. gulp
  23. .task("pre", function() {
  24. gulp.src(["src/web/**/*.html", "!src/web/index.html", "!src/web/bower_components/**/*"])
  25. .pipe(plumber(errLogger))
  26. .pipe(minifyHtml())
  27. .pipe(ngHtml2Js({
  28. moduleName: function(file) {
  29. var pathParts = file.path.split("/");
  30. var prefix = pathParts[pathParts.length - 3];
  31. var moduleName = pathParts[pathParts.length - 2];
  32. return "modellang-ide." + (prefix === "pages" ? "" : prefix + ".") + moduleName;
  33. }
  34. }))
  35. .pipe(concat("templates.min.js"))
  36. .pipe(gulp.dest(opts.buildDir + "/web"));
  37. return gulp.src("src/web/assets/**/*")
  38. .pipe(plumber(errLogger))
  39. .pipe(babel())
  40. .pipe(uglify())
  41. .pipe(gulp.dest(opts.buildDir + "/web/assets"));
  42. })
  43. .task("bower", function() {
  44. return bower();
  45. })
  46. .task("concat", ["pre", "bower"], function() {
  47. var assets = useref.assets();
  48. return gulp.src("src/web/index.html")
  49. .pipe(plumber(errLogger))
  50. .pipe(assets)
  51. .pipe(gulpif("index.min.js", babel({blacklist: ["useStrict"]})))
  52. .pipe(gulpif("*.css", minifyCss()))
  53. .pipe(assets.restore())
  54. .pipe(useref())
  55. .pipe(gulp.dest(opts.buildDir + "/web"));
  56. })
  57. .task("parser", function() {
  58. return gulp.src("src/lib/parser/modellang.pegjs")
  59. .pipe(plumber(errLogger))
  60. .pipe(peg({
  61. exportVar: "modellangParser"
  62. }))
  63. .pipe(babel({modules: "umd", blacklist: ["useStrict"]}))
  64. .pipe(gulp.dest(opts.buildDir + "/lib/parser"))
  65. .pipe(rename("modellang-parser.js"))
  66. .pipe(uglify())
  67. .pipe(gulp.dest(opts.buildDir + "/web/assets/scripts"));
  68. })
  69. .task("generator", function() {
  70. return gulp.src("src/lib/generator/modellang.es6")
  71. .pipe(plumber(errLogger))
  72. .pipe(babel())
  73. .pipe(gulp.dest(opts.buildDir + "/lib/generator"))
  74. .pipe(rename("modellang-gen.js"))
  75. .pipe(uglify())
  76. .pipe(gulp.dest(opts.buildDir + "/web/assets/scripts"));
  77. })
  78. .task("default", ["parser", "generator"], function() {
  79. return;
  80. })
  81. .task("build", ["concat", "parser", "generator"], function() {
  82. return gulp.src(opts.buildDir + "/web/{index,templates}.min.js")
  83. .pipe(plumber(errLogger))
  84. .pipe(concat("index.min.js"))
  85. .pipe(ngAnnotate())
  86. .pipe(uglify())
  87. .pipe(gulp.dest(opts.buildDir + "/web"));
  88. })
  89. .task("deploy", ["build"], function() {
  90. return gulp.src(opts.buildDir + "/web/**/*")
  91. .pipe(deploy({
  92. push: gutil.env.nopush ? false : true,
  93. }));
  94. })
  95. ;