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;