gulpfile.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. const gulp = require('gulp');
  2. const concat = require('gulp-concat');
  3. const replace = require('gulp-replace');
  4. const merge2 = require('merge2');
  5. const cssnano = require('gulp-cssnano');
  6. const gulpFilter = require('gulp-filter');
  7. const order = require('gulp-order');
  8. const eslint = require('gulp-eslint');
  9. const templateCache = require('./scripts/templateCache');
  10. const i18n = require('./scripts/i18n');
  11. const pkg = require('./package.json');
  12. const paths = {
  13. cache: 'src/cache.js',
  14. manifest: 'src/manifest.json',
  15. templates: 'src/**/templates/*.html',
  16. jsBg: 'src/background/**/*.js',
  17. jsOptions: 'src/options/**/*.js',
  18. jsPopup: 'src/popup/**/*.js',
  19. locales: [
  20. 'src/**/*.js',
  21. 'src/**/*.html',
  22. 'src/**/*.json',
  23. 'src/**/*.yml',
  24. ],
  25. copy: [
  26. 'src/*.js',
  27. '!src/cache.js',
  28. 'src/public/**',
  29. 'src/*/*.html',
  30. 'src/*/*.css',
  31. ],
  32. };
  33. gulp.task('watch', () => {
  34. gulp.watch([].concat(paths.cache, paths.templates), ['templates']);
  35. gulp.watch(paths.jsBg, ['js-bg']);
  36. gulp.watch(paths.jsOptions, ['js-options']);
  37. gulp.watch(paths.jsPopup, ['js-popup']);
  38. gulp.watch(paths.copy, ['copy-files']);
  39. gulp.watch(paths.locales, ['copy-i18n']);
  40. });
  41. gulp.task('eslint', () => (
  42. gulp.src([
  43. 'src/**/*.js',
  44. '!src/public/**',
  45. ])
  46. .pipe(eslint())
  47. .pipe(eslint.format())
  48. ));
  49. gulp.task('templates', () => (
  50. merge2([
  51. gulp.src(paths.cache),
  52. gulp.src(paths.templates).pipe(templateCache()),
  53. ]).pipe(concat('cache.js'))
  54. .pipe(gulp.dest('dist'))
  55. ));
  56. gulp.task('js-bg', () => (
  57. gulp.src(paths.jsBg)
  58. .pipe(concat('background/app.js'))
  59. .pipe(gulp.dest('dist'))
  60. ));
  61. gulp.task('js-options', () => (
  62. gulp.src(paths.jsOptions)
  63. .pipe(order([
  64. '**/tab-*.js',
  65. '!**/app.js',
  66. ]))
  67. .pipe(concat('options/app.js'))
  68. .pipe(gulp.dest('dist'))
  69. ));
  70. gulp.task('js-popup', () => (
  71. gulp.src(paths.jsPopup)
  72. .pipe(order([
  73. '**/base.js',
  74. '!**/app.js',
  75. ]))
  76. .pipe(concat('popup/app.js'))
  77. .pipe(gulp.dest('dist'))
  78. ))
  79. gulp.task('manifest', () => (
  80. gulp.src(paths.manifest, {base: 'src'})
  81. .pipe(replace('__VERSION__', pkg.version))
  82. .pipe(gulp.dest('dist'))
  83. ));
  84. gulp.task('copy-files', () => {
  85. const cssFilter = gulpFilter(['**/*.css'], {restore: true});
  86. return gulp.src(paths.copy)
  87. .pipe(cssFilter)
  88. .pipe(cssnano({
  89. zindex: false,
  90. }))
  91. .pipe(cssFilter.restore)
  92. .pipe(gulp.dest('dist/'));
  93. });
  94. gulp.task('copy-i18n', () => (
  95. gulp.src(paths.locales)
  96. .pipe(i18n.extract({
  97. base: 'src',
  98. prefix: '_locales',
  99. touchedOnly: true,
  100. useDefaultLang: true,
  101. markUntouched: false,
  102. extension: '.json',
  103. }))
  104. .pipe(gulp.dest('dist'))
  105. ));
  106. gulp.task('build', [
  107. 'templates',
  108. 'js-bg',
  109. 'js-options',
  110. 'js-popup',
  111. 'manifest',
  112. 'copy-files',
  113. 'copy-i18n',
  114. ]);
  115. gulp.task('i18n', () => (
  116. gulp.src(paths.locales)
  117. .pipe(i18n.extract({
  118. base: 'src',
  119. prefix: '_locales',
  120. touchedOnly: false,
  121. useDefaultLang: false,
  122. markUntouched: true,
  123. extension: '.yml',
  124. }))
  125. .pipe(gulp.dest('src'))
  126. ));
  127. gulp.task('default', ['build']);