gulpfile.js 3.5 KB

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