Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

99 řádky
2.0 KiB

  1. const path = require('path');
  2. const chalk = require('chalk');
  3. const rollup = require('rollup');
  4. const log = console.log; // eslint-disable-line
  5. const {
  6. apps_list
  7. } = require('./rollup.utils');
  8. const {
  9. get_options_for
  10. } = require('./config');
  11. const { get_redis_subscriber } = require('../node_utils');
  12. const subscriber = get_redis_subscriber();
  13. watch_assets();
  14. function watch_assets() {
  15. let watchOptions = [];
  16. apps_list.map(app => {
  17. watchOptions.push(...get_watch_options(app));
  18. });
  19. log(chalk.green(`\nRollup Watcher Started`));
  20. let watcher = rollup.watch(watchOptions);
  21. watcher.on('event', event => {
  22. switch(event.code) {
  23. case 'START': {
  24. log(chalk.yellow(`\nWatching...`));
  25. break;
  26. }
  27. case 'BUNDLE_START': {
  28. const output = event.output[0];
  29. if (output.endsWith('.js') || output.endsWith('.vue')) {
  30. log('Rebuilding', path.basename(event.output[0]));
  31. }
  32. break;
  33. }
  34. case 'ERROR': {
  35. log_error(event.error);
  36. break;
  37. }
  38. case 'FATAL': {
  39. log_error(event.error);
  40. break;
  41. }
  42. default: break;
  43. }
  44. });
  45. }
  46. function get_watch_options(app) {
  47. const options = get_options_for(app);
  48. return options.map(({ inputOptions, outputOptions, output_file}) => {
  49. return Object.assign({}, inputOptions, {
  50. output: outputOptions,
  51. plugins: [log_css_change({output: output_file})].concat(inputOptions.plugins)
  52. });
  53. });
  54. }
  55. function log_css_change({output}) {
  56. return {
  57. name: 'log-css-change',
  58. generateBundle() {
  59. if (!output.endsWith('.css')) return null;
  60. log('Rebuilding', path.basename(output));
  61. return null;
  62. }
  63. };
  64. }
  65. function log_error(error) {
  66. log(chalk.yellow('Error in: ' + error.id));
  67. log(chalk.red(error.toString()));
  68. if (error.frame) {
  69. log(chalk.red(error.frame));
  70. }
  71. // notify redis which in turns tells socketio to publish this to browser
  72. const payload = {
  73. event: 'build_error',
  74. message: `
  75. Error in: ${error.id}
  76. ${error.toString()}
  77. ${error.frame ? error.frame : ''}
  78. `
  79. };
  80. subscriber.publish('events', JSON.stringify(payload));
  81. }