gulpfile.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. let gulp = require('gulp'),
  2. clean = require('gulp-clean'),
  3. gulpif = require('gulp-if'),
  4. minify = require('gulp-minify'),
  5. jshint = require('gulp-jshint'),
  6. babel = require('gulp-babel'),
  7. runSequence = require('run-sequence'),
  8. copy = require('gulp-copy'),
  9. cleanCss = require('gulp-clean-css'),
  10. csslint = require('gulp-csslint'),
  11. rename = require("gulp-rename"),
  12. imagemin = require("gulp-image"),
  13. concat = require("gulp-concat"),
  14. plumber = require("gulp-plumber"),
  15. zip = require('gulp-zip'),
  16. useref = require('gulp-useref'),
  17. args = require('get-gulp-args')(),
  18. replace = require('gulp-replace-task');
  19. var platform = 'chrome';
  20. if (args.platform == 'firefox') {
  21. platform = 'moz';
  22. }
  23. var onError = function (err) {
  24. console.log(err);
  25. };
  26. gulp.task('clean', function() {
  27. return gulp.src([
  28. 'release/*',
  29. 'extension.zip'
  30. ], {force: true})
  31. .pipe(clean());
  32. });
  33. gulp.task('compress', function() {
  34. return gulp.src('release/**/*')
  35. .pipe(zip('extension.zip'))
  36. .pipe(gulp.dest('.'));
  37. });
  38. gulp.task('jslint', function() {
  39. return gulp.src('extension/**/*.js')
  40. .pipe(jshint({
  41. esversion: 6
  42. }))
  43. .pipe(jshint.reporter('jshint-stylish'));
  44. });
  45. gulp.task('csslint', function() {
  46. return gulp.src('extension/**/*.css')
  47. .pipe(csslint())
  48. .pipe(csslint.formatter())
  49. });
  50. gulp.task('dev-no-lint', function() {
  51. return runSequence(
  52. 'clean',
  53. ['core', 'content_scripts'],
  54. 'images',
  55. 'manifest',
  56. 'font'
  57. );
  58. });
  59. gulp.task('dev', function() {
  60. return runSequence(
  61. 'clean',
  62. ['jslint', 'csslint'],
  63. ['core', 'content_scripts'],
  64. 'images',
  65. 'manifest',
  66. 'font'
  67. );
  68. });
  69. gulp.task('release', function() {
  70. return runSequence(
  71. 'clean',
  72. ['jslint', 'csslint'],
  73. ['core', 'content_scripts'],
  74. 'images',
  75. 'manifest',
  76. 'font',
  77. 'compress'
  78. );
  79. });
  80. gulp.task('font', function() {
  81. return gulp.src('extension/fonts/**/*')
  82. .pipe(gulp.dest('release/fonts'));
  83. });
  84. gulp.task('core', function() {
  85. return gulp.src('extension/view/*.html')
  86. .pipe(useref())
  87. .pipe(plumber({
  88. errorHandler: onError
  89. }))
  90. .pipe(gulpif('*.js', replace({
  91. patterns : [
  92. {
  93. match : /\/\/\*\* NODE(?:\n.*)*\/\/\*\*/,
  94. replace : ''
  95. }
  96. ]
  97. })))
  98. .pipe(gulpif('*.js', babel({
  99. presets: ['es2015']
  100. })))
  101. .pipe(gulpif('*.js', minify({
  102. ext:{
  103. min:'.js'
  104. },
  105. noSource : true
  106. })))
  107. .pipe(replace({
  108. patterns : [
  109. {
  110. match : /\*\*\*browser\*\*\*/g,
  111. replace : platform
  112. }
  113. ]
  114. }))
  115. .pipe(gulpif('*.css', cleanCss({
  116. })))
  117. .pipe(gulp.dest('release/view'));
  118. });
  119. gulp.task('content_scripts', function() {
  120. let notification = gulp.src([
  121. 'extension/js/content_scripts/notification.js',
  122. ])
  123. .pipe(plumber())
  124. .pipe(gulpif('*.js', replace({
  125. patterns : [
  126. {
  127. match : /\/\/\*\* NODE(?:\n.*)*\/\/\*\*/,
  128. replace : ''
  129. }
  130. ]
  131. })))
  132. .pipe(babel({
  133. presets : ["es2015"]
  134. }))
  135. .pipe(concat('notification.js'))
  136. .pipe(minify({
  137. ext : {
  138. min : '.min.js'
  139. },
  140. noSource : true
  141. }))
  142. .pipe(gulp.dest('release/js'));
  143. let serp = gulp.src([
  144. 'extension/js/content_scripts/serp.js'
  145. ])
  146. .pipe(plumber())
  147. .pipe(gulpif('*.js', replace({
  148. patterns : [
  149. {
  150. match : /\/\/\*\* NODE(?:\n.*)*\/\/\*\*/,
  151. replace : ''
  152. }
  153. ]
  154. })))
  155. .pipe(babel({
  156. presets : ["es2015"]
  157. }))
  158. .pipe(minify({
  159. ext : {
  160. min : '.min.js'
  161. },
  162. noSource : true
  163. }))
  164. .pipe(gulp.dest('release/js'));
  165. let extension = gulp.src([
  166. 'extension/js/content_scripts/extension.js'
  167. ])
  168. .pipe(plumber())
  169. .pipe(gulpif('*.js', replace({
  170. patterns : [
  171. {
  172. match : /\/\/\*\* NODE(?:\n.*)*\/\/\*\*/,
  173. replace : ''
  174. }
  175. ]
  176. })))
  177. .pipe(babel({
  178. presets : ["es2015"]
  179. }))
  180. .pipe(minify({
  181. ext : {
  182. min : '.min.js'
  183. },
  184. noSource : true
  185. }))
  186. .pipe(gulp.dest('release/js'));
  187. return [notification, serp, extension];
  188. });
  189. gulp.task('images', function() {
  190. return gulp.src('extension/images/*')
  191. .pipe(imagemin())
  192. .pipe(gulp.dest('release/images'))
  193. });
  194. gulp.task('manifest', function() {
  195. return gulp.src('extension/manifest.json')
  196. .pipe(gulp.dest('release'))
  197. })
  198. gulp.task('watch', function() {
  199. gulp.watch('extension/**/*', ['dev-no-lint']);
  200. })