123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- 'use strict';
- var fs = require('fs');
- var log = require('gulplog');
- var stdout = require('mute-stdout');
- var ansi = require('../../shared/ansi');
- var exit = require('../../shared/exit');
- var tildify = require('../../shared/tildify');
- var logTasks = require('../../shared/log/tasks');
- var logEvents = require('../^4.0.0/log/events');
- var logSyncTask = require('../^4.0.0/log/sync-task');
- var logTasksSimple = require('../^4.0.0/log/tasks-simple');
- var registerExports = require('../../shared/register-exports');
- var copyTree = require('../../shared/log/copy-tree');
- var requireOrImport = require('../../shared/require-or-import');
- function execute(opts, env, config) {
- 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();
- }
- var gulpInst = require(env.modulePath);
- logEvents(gulpInst);
- logSyncTask(gulpInst, opts);
- // 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);
- }
- registerExports(gulpInst, exported);
- // Always unmute stdout after gulpfile is required
- stdout.unmute();
- var tree;
- if (opts.tasksSimple) {
- return logTasksSimple(gulpInst.tree());
- }
- if (opts.tasks) {
- tree = {};
- if (config.description && typeof config.description === 'string') {
- tree.label = config.description;
- } else {
- tree.label = 'Tasks for ' + ansi.magenta(tildify(env.configPath));
- }
- tree.nodes = gulpInst.tree({ deep: true });
- return logTasks(tree, opts, function(taskname) {
- return gulpInst.task(taskname);
- });
- }
- if (opts.tasksJson) {
- tree = {};
- if (config.description && typeof config.description === 'string') {
- tree.label = config.description;
- } else {
- tree.label = 'Tasks for ' + tildify(env.configPath);
- }
- tree.nodes = gulpInst.tree({ deep: true });
- var output = JSON.stringify(copyTree(tree, opts));
- if (typeof opts.tasksJson === 'boolean' && opts.tasksJson) {
- return console.log(output);
- }
- return fs.writeFileSync(opts.tasksJson, output, 'utf-8');
- }
- try {
- log.info('Using gulpfile', ansi.magenta(tildify(env.configPath)));
- var runMethod = opts.series ? 'series' : 'parallel';
- gulpInst[runMethod](toRun)(function(err) {
- if (err) {
- exit(1);
- }
- });
- } catch (err) {
- log.error(ansi.red(err.message));
- log.error('To list available tasks, try running: gulp --tasks');
- exit(1);
- }
- });
- }
- module.exports = execute;
|