watch.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. var fs = require('fs');
  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. var mute = false;
  14. files.forEach(function(file) {
  15. var watcher = browserify(file, {
  16. cache: {},
  17. packageCache: {},
  18. plugin: [watchify]
  19. })
  20. .require('../src/index.js', { expose: 'uppy' })
  21. .require('../src/core/index.js', { expose: 'uppy/core' })
  22. .require('../src/plugins/index.js', { expose: 'uppy/plugins' })
  23. .transform(babelify);
  24. watcher
  25. .on('update', bundle)
  26. .on('error', handleError)
  27. .on('log', function(msg) {
  28. console.log(chalk.green('✓ done:'), chalk.bold(file), chalk.gray.dim(msg));
  29. mute = false;
  30. });
  31. bundle();
  32. function bundle(id) {
  33. if (id && !mute) {
  34. console.log(chalk.cyan('change:'), chalk.bold(id[0]));
  35. mute = true;
  36. }
  37. var output = file.replace(src, dest);
  38. var bundle = watcher.bundle();
  39. bundle.pipe(createStream(output));
  40. bundle.pipe(createStream(output.replace('src', 'public')));
  41. }
  42. });
  43. });
  44. function createStream(filepath) {
  45. return fs.createWriteStream(filepath);
  46. }
  47. function handleError(err) {
  48. console.log(chalk.red('✗ error:'), err.message);
  49. notifier.notify({
  50. 'title': 'Build failed:',
  51. 'message': err.message
  52. })
  53. this.emit('end');
  54. }