gulpfile.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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 del = require('del');
  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. jsOptions: 'src/options/**/*.js',
  17. jsPopup: 'src/popup/**/*.js',
  18. locales: [
  19. 'src/**/*.js',
  20. 'src/**/*.html',
  21. 'src/**/*.json',
  22. ],
  23. copy: [
  24. 'src/**',
  25. '!src/manifest.json',
  26. '!src/cache.js',
  27. '!src/**/templates/**',
  28. '!src/**/templates',
  29. '!src/**/views',
  30. '!src/options/**/*.js',
  31. '!src/popup/**/*.js',
  32. '!src/_locales/**',
  33. ],
  34. };
  35. gulp.task('watch', function () {
  36. gulp.watch([].concat(paths.cache, paths.templates), ['templates']);
  37. gulp.watch(paths.jsOptions, ['js-options']);
  38. gulp.watch(paths.jsPopup, ['js-popup']);
  39. gulp.watch(paths.copy, ['copy-files']);
  40. gulp.watch(paths.locales, ['copy-i18n']);
  41. });
  42. gulp.task('clean', function () {
  43. return del(['dist']);
  44. });
  45. gulp.task('templates', function () {
  46. return merge2([
  47. gulp.src(paths.cache),
  48. gulp.src(paths.templates).pipe(templateCache()),
  49. ]).pipe(concat('cache.js'))
  50. .pipe(gulp.dest('dist'));
  51. });
  52. gulp.task('js-options', function () {
  53. return gulp.src(paths.jsOptions)
  54. .pipe(order([
  55. '**/tab-*.js',
  56. '!**/app.js',
  57. ]))
  58. .pipe(concat('options/app.js'))
  59. .pipe(gulp.dest('dist'));
  60. });
  61. gulp.task('js-popup', function () {
  62. return gulp.src(paths.jsPopup)
  63. .pipe(order([
  64. '**/base.js',
  65. '!**/app.js',
  66. ]))
  67. .pipe(concat('popup/app.js'))
  68. .pipe(gulp.dest('dist'));
  69. })
  70. gulp.task('manifest', function () {
  71. return gulp.src(paths.manifest, {base: 'src'})
  72. .pipe(replace('__VERSION__', pkg.version))
  73. .pipe(gulp.dest('dist'));
  74. });
  75. gulp.task('copy-files', function () {
  76. const cssFilter = gulpFilter(['**/*.css'], {restore: true});
  77. return gulp.src(paths.copy)
  78. .pipe(cssFilter)
  79. .pipe(cssnano())
  80. .pipe(cssFilter.restore)
  81. .pipe(gulp.dest('dist/'));
  82. });
  83. gulp.task('copy-i18n', function () {
  84. return gulp.src(paths.locales)
  85. .pipe(i18n.extract({
  86. base: 'src',
  87. prefix: '_locales',
  88. touchedOnly: true,
  89. useDefaultLang: true,
  90. markUntouched: false,
  91. }))
  92. .pipe(gulp.dest('dist'));
  93. });
  94. gulp.task('build', ['templates', 'js-options', 'js-popup', 'manifest', 'copy-files', 'copy-i18n']);
  95. gulp.task('i18n', function () {
  96. return gulp.src(paths.locales)
  97. .pipe(i18n.extract({
  98. base: 'src',
  99. prefix: '_locales',
  100. touchedOnly: false,
  101. useDefaultLang: false,
  102. markUntouched: true,
  103. }))
  104. .pipe(gulp.dest('src'));
  105. });
  106. gulp.task('default', ['build']);