When a project truly gets big enough to have multiple variants of a build, a simple task function might be reused as variants. For example, the just-task-preset package includes a useful collection of task functions like tscTask. However, these tasks tend to be very generic. tscTask() is a task function factory. Calling it will generate a task function. But sometimes variations of the same preconfigured task function is needed. We will use a concept called thunk to create a task function that creates a task function on the fly!

Here is an example of a simple usage of a preset task function factory:

const { task } = require('just-task');
const { tscTask } = require('just-task-preset');

task('build', tscTask());

Now, let's try to preconfigure this task based on something we can pass in from the arguments:

const { task, argv, option } = require('just-task');
const { tscTask } = require('just-task-preset');

option('amd');

task('build', () => tscTask({ module: argv().amd ? 'amd' : 'commonjs' }));

Now the build task can take in an argument and perform TypeScript compilation for different modes:

$ just build --amd
$ just build --commonjs