watch.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. var createStream = require('fs').createWriteStream;
  2. var glob = require('multi-glob').glob;
  3. var chalk = require('chalk');
  4. var notifier = require('node-notifier');
  5. var babelify = require('babelify');
  6. var browserify = require('browserify');
  7. var watchify = require('watchify');
  8. var src = 'src/js/app.js';
  9. var dest = 'static/js/app.js';
  10. var pattern = 'src/examples/**/' + src;
  11. glob([pattern, 'website/' + pattern], function(err, files) {
  12. if (err) throw new Error(err);
  13. console.log('--> Watching examples..');
  14. console.log('--> Pre-building ' + files.length + ' files..')
  15. var muted = [];
  16. files.forEach(function(file) {
  17. var watcher = browserify(file, {
  18. cache: {},
  19. packageCache: {},
  20. plugin: [watchify]
  21. })
  22. .require('../src/index.js', { expose: 'uppy' })
  23. .require('../src/core/index.js', { expose: 'uppy/core' })
  24. .require('../src/plugins/index.js', { expose: 'uppy/plugins' })
  25. .transform(babelify);
  26. watcher
  27. .on('update', bundle)
  28. .on('error', onError)
  29. .on('log', function(msg) {
  30. console.info(chalk.green('✓ done:'), chalk.green(file), chalk.gray.dim('(' + msg + ')'));
  31. })
  32. .on('file', function(file, id, parent) {
  33. muted = muted.filter(function(mutedId) {
  34. return id !== mutedId;
  35. });
  36. });
  37. bundle();
  38. function bundle(ids) {
  39. ids = ids || [];
  40. ids.forEach(function(id) {
  41. if (!isMuted(id, muted)) {
  42. console.info(chalk.cyan('change:'), id);
  43. muted.push(id);
  44. }
  45. });
  46. var output = file.replace(src, dest);
  47. var bundle = watcher.bundle()
  48. .on('error', onError)
  49. bundle.pipe(createStream(output));
  50. bundle.pipe(createStream(output.replace('src', 'public')));
  51. }
  52. });
  53. });
  54. function onError(err) {
  55. console.error(chalk.red('✗ error:'), chalk.red(err.message));
  56. notifier.notify({
  57. 'title': 'Build failed:',
  58. 'message': err.message
  59. })
  60. this.emit('end');
  61. }
  62. function isMuted(id, list) {
  63. return list.reduce(function(prev, curr) {
  64. return prev || (curr === id);
  65. }, false);
  66. }