gulpfile.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. const fs = require('fs');
  2. const gulp = require('gulp');
  3. const connect = require('gulp-connect');
  4. const open = require('gulp-open');
  5. const header = require('gulp-header');
  6. const uglify = require('gulp-uglify');
  7. const sourcemaps = require('gulp-sourcemaps');
  8. const rollup = require('rollup');
  9. const resolve = require('rollup-plugin-node-resolve');
  10. const buble = require('rollup-plugin-buble');
  11. const rename = require('gulp-rename');
  12. const modifyFile = require('gulp-modify-file');
  13. const pkg = require('./package.json');
  14. const date = (function date() {
  15. return {
  16. year: new Date().getFullYear(),
  17. month: ('January February March April May June July August September October November December').split(' ')[new Date().getMonth()],
  18. day: new Date().getDate(),
  19. };
  20. }());
  21. const banner = `
  22. /**
  23. * Dom7 ${pkg.version}
  24. * ${pkg.description}
  25. * ${pkg.homepage}
  26. *
  27. * Copyright ${date.year}, ${pkg.author}
  28. * The iDangero.us
  29. * http://www.idangero.us/
  30. *
  31. * Licensed under ${pkg.license}
  32. *
  33. * Released on: ${date.month} ${date.day}, ${date.year}
  34. */
  35. `.trim();
  36. // UMD DIST
  37. function umd(cb) {
  38. const env = process.env.NODE_ENV || 'development';
  39. const output = env === 'development' ? './build' : './dist';
  40. rollup.rollup({
  41. input: './src/dom7.js',
  42. plugins: [resolve(), buble()],
  43. }).then((bundle) => {
  44. return bundle.write({
  45. strict: true,
  46. file: `${output}/dom7.js`,
  47. format: 'umd',
  48. name: 'Dom7',
  49. sourcemap: env === 'development',
  50. sourcemapFile: `${output}/dom7.js.map`,
  51. banner,
  52. });
  53. }).then(() => {
  54. if (env === 'development') {
  55. if (cb) cb();
  56. return;
  57. }
  58. gulp.src('./dist/dom7.js')
  59. .pipe(sourcemaps.init())
  60. .pipe(uglify())
  61. .pipe(header(banner))
  62. .pipe(rename('dom7.min.js'))
  63. .pipe(sourcemaps.write('./'))
  64. .pipe(gulp.dest('./dist/'))
  65. .on('end', () => {
  66. if (cb) cb();
  67. });
  68. });
  69. }
  70. // ES MODULE DIST
  71. function es(cb) {
  72. const env = process.env.NODE_ENV || 'development';
  73. const output = env === 'development' ? './build' : './dist';
  74. let cbs = 0;
  75. rollup.rollup({
  76. input: './src/dom7.js',
  77. external: ['ssr-window'],
  78. }).then((bundle) => {
  79. return bundle.write({
  80. strict: true,
  81. file: `${output}/dom7.module.js`,
  82. format: 'es',
  83. name: 'Dom7',
  84. sourcemap: env === 'development',
  85. sourcemapFile: `${output}/dom7.module.js.map`,
  86. banner,
  87. });
  88. }).then(() => {
  89. cbs += 1;
  90. if (cb && cbs === 2) cb();
  91. });
  92. rollup.rollup({
  93. input: './src/dom7.modular.js',
  94. external: ['ssr-window'],
  95. }).then((bundle) => {
  96. return bundle.write({
  97. strict: true,
  98. file: `${output}/dom7.modular.js`,
  99. format: 'es',
  100. name: 'Dom7',
  101. sourcemap: env === 'development',
  102. sourcemapFile: `${output}/dom7.modular.js.map`,
  103. banner,
  104. });
  105. }).then(() => {
  106. cbs += 1;
  107. if (cb && cbs === 2) cb();
  108. });
  109. }
  110. gulp.task('build', (cb) => {
  111. let cbs = 0;
  112. const env = process.env.NODE_ENV || 'development';
  113. const output = env === 'development' ? './build' : './dist';
  114. fs.copyFileSync('./src/dom7.d.ts', `${output}/dom7.d.ts`);
  115. umd(() => {
  116. cbs += 1;
  117. if (cbs === 2) cb();
  118. });
  119. es(() => {
  120. cbs += 1;
  121. if (cbs === 2) cb();
  122. });
  123. });
  124. gulp.task('demo', (cb) => {
  125. const env = process.env.NODE_ENV || 'development';
  126. gulp.src('./demo/index.html')
  127. .pipe(modifyFile((content) => {
  128. if (env === 'development') {
  129. return content
  130. .replace('../dist/dom7.min.js', '../build/dom7.js');
  131. }
  132. return content
  133. .replace('../build/dom7.js', '../dist/dom7.min.js');
  134. }))
  135. .pipe(gulp.dest('./demo/'))
  136. .on('end', () => {
  137. if (cb) cb();
  138. });
  139. });
  140. gulp.task('watch', () => {
  141. gulp.watch('./src/*.js', gulp.series(['build']));
  142. });
  143. gulp.task('connect', () => connect.server({
  144. root: ['./'],
  145. livereload: true,
  146. port: '3000',
  147. }));
  148. gulp.task('open', () => gulp.src('./demo/index.html').pipe(open({ uri: 'http://localhost:3000/demo/index.html' })));
  149. gulp.task('server', gulp.parallel(['watch', 'connect', 'open']));