75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var fs = require('fs');
 | |
| 
 | |
| var log = require('gulplog');
 | |
| var stdout = require('mute-stdout');
 | |
| var messages = require('@gulpjs/messages');
 | |
| 
 | |
| var taskTree = require('./task-tree');
 | |
| var copyTree = require('../../shared/log/copy-tree');
 | |
| 
 | |
| var logTasks = require('../../shared/log/tasks');
 | |
| var exit = require('../../shared/exit');
 | |
| var logEvents = require('./log/events');
 | |
| var logTasksSimple = require('./log/tasks-simple');
 | |
| var registerExports = require('../../shared/register-exports');
 | |
| var requireOrImport = require('../../shared/require-or-import');
 | |
| 
 | |
| function execute(env, opts, translate) {
 | |
|   var tasks = opts._;
 | |
|   var toRun = tasks.length ? tasks : ['default'];
 | |
| 
 | |
|   if (opts.tasksSimple || opts.tasks || opts.tasksJson) {
 | |
|     // Mute stdout if we are listing tasks
 | |
|     stdout.mute();
 | |
|   }
 | |
| 
 | |
|   // This is what actually loads up the gulpfile
 | |
|   requireOrImport(env.configPath, function(err, exported) {
 | |
|     // Before import(), if require() failed we got an unhandled exception on the module level.
 | |
|     // So console.error() & exit() were added here to mimic the old behavior as close as possible.
 | |
|     if (err) {
 | |
|       console.error(err);
 | |
|       exit(1);
 | |
|     }
 | |
| 
 | |
|     log.info({ tag: messages.GULPFILE, path: env.configPath });
 | |
| 
 | |
|     var gulpInst = require(env.modulePath);
 | |
|     logEvents(gulpInst);
 | |
| 
 | |
|     registerExports(gulpInst, exported);
 | |
| 
 | |
|     // Always unmute stdout after gulpfile is required
 | |
|     stdout.unmute();
 | |
| 
 | |
|     var tree;
 | |
|     if (opts.tasksSimple) {
 | |
|       return logTasksSimple(env, gulpInst);
 | |
|     }
 | |
|     if (opts.tasks) {
 | |
|       tree = taskTree(gulpInst.tasks);
 | |
|       tree.label = translate.message({ tag: messages.DESCRIPTION, path: env.configPath });
 | |
|       return logTasks(tree, opts, function(task) {
 | |
|         return gulpInst.tasks[task].fn;
 | |
|       }, translate);
 | |
|     }
 | |
|     if (opts.tasksJson) {
 | |
|       tree = taskTree(gulpInst.tasks);
 | |
|       tree.label = translate.message({ tag: messages.DESCRIPTION, path: env.configPath });
 | |
| 
 | |
|       var output = JSON.stringify(copyTree(tree, opts));
 | |
| 
 | |
|       if (typeof opts.tasksJson === 'boolean') {
 | |
|         return console.log(output);
 | |
|       }
 | |
| 
 | |
|       return fs.writeFileSync(opts.tasksJson, output, 'utf-8');
 | |
|     }
 | |
|     gulpInst.start.apply(gulpInst, toRun);
 | |
|   });
 | |
| }
 | |
| 
 | |
| module.exports = execute;
 |