gulpfile.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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("angular", function() {
  24. return 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.js"))
  36. .pipe(gulp.dest(opts.buildDir + "/web"));
  37. })
  38. .task("assets", function() {
  39. return gulp.src("src/web/assets/**/*")
  40. .pipe(plumber(errLogger))
  41. .pipe(babel())
  42. .pipe(uglify())
  43. .pipe(gulp.dest(opts.buildDir + "/web/assets"));
  44. })
  45. .task("bower", function() {
  46. return bower();
  47. })
  48. .task("concat", ["angular", "assets", "bower"], function() {
  49. var assets = useref.assets();
  50. return gulp.src("src/web/index.html")
  51. .pipe(plumber(errLogger))
  52. .pipe(assets)
  53. .pipe(gulpif("index.min.js", babel({blacklist: ["useStrict"]})))
  54. .pipe(gulpif("*.css", minifyCss()))
  55. .pipe(assets.restore())
  56. .pipe(useref())
  57. .pipe(gulp.dest(opts.buildDir + "/web"));
  58. })
  59. .task("parser", function() {
  60. return gulp.src("src/lib/parser/modellang.pegjs")
  61. .pipe(plumber(errLogger))
  62. .pipe(peg({
  63. exportVar: "modellangParser"
  64. }))
  65. .pipe(babel({modules: "umd", blacklist: ["useStrict"]}))
  66. .pipe(gulp.dest(opts.buildDir + "/lib/parser"))
  67. .pipe(rename("modellang-parser.js"))
  68. .pipe(uglify())
  69. .pipe(gulp.dest(opts.buildDir + "/web/assets/scripts"));
  70. })
  71. .task("generator", function() {
  72. return gulp.src("src/lib/generator/modellang.es6")
  73. .pipe(plumber(errLogger))
  74. .pipe(babel())
  75. .pipe(gulp.dest(opts.buildDir + "/lib/generator"))
  76. .pipe(rename("modellang-gen.js"))
  77. .pipe(uglify())
  78. .pipe(gulp.dest(opts.buildDir + "/web/assets/scripts"));
  79. })
  80. .task("default", ["parser", "generator"], function() {
  81. return;
  82. })
  83. .task("build", ["concat", "parser", "generator"], function() {
  84. return gulp.src(opts.buildDir + "/web/{index.min,templates}.js")
  85. .pipe(plumber(errLogger))
  86. .pipe(concat("index.min.js"))
  87. .pipe(ngAnnotate())
  88. .pipe(uglify())
  89. .pipe(gulp.dest(opts.buildDir + "/web"));
  90. })
  91. .task("deploy", ["build"], function() {
  92. return gulp.src(opts.buildDir + "/web/**/*")
  93. .pipe(deploy({
  94. push: !gutil.env.nopush,
  95. }));
  96. })
  97. ;