1.1.3 • Published 8 years ago
gulp-apps v1.1.3
gulp-apps
Do you have several apps or components but you want to expose the same build process? Then this is the package for you.
##To install:
npm i gulp-apps --save-dev
##Usage
gulpfile.ts :
Defining tasks template
import {IApp, gulpApps, IAppContext} from "gulp-apps";
const gulp = require('gulp');
const apps = require('gulp-apps').gulpApps;
// The structure of my apps
interface IMyApp extends IApp {
    dir: string;
    enabled: boolean;
}
// Initializing tasks template
const tasks =
    apps.use(gulp).initTasks<IMyApp>([
        {
            name: 'task-1',
            fn: () => {
                console.log('hello from task-1');
            }
        },
        {
            name: 'task-2',
            dependencies: ['task-1'],
            fn: (done) => {
                console.log('task-2 has dependencies');
                Promise.resolve().then(done);
            }
        },
        {
            name: 'task-3',
            dependencies: ['task-1', 'task-2'],
            fn: function(this : IAppContext<IMyApp>) => {
                console.log('accessing relevant app on task run-time');
                console.log(this.app.name);
            }
        }
    ]);Creating tasks for apps
// Initializing tasks for a given app to get a runner.
const runner = tasks.for({
    name: 'firstApp',
    dir: './app1',
    enabled: true
});
// or initialize for multiple apps to get a group runner 
const groupRunner = tasks.forAll([
    {
        name: 'secondApp',
        enabled: true,
        dir: './app2'
    },
    {
        name: 'thirdApp',
        enabled: false,
        dir: './app3'
    }
]);Result in defined tasks:
[22:37:25] Tasks for ~\projects\tmp\gulpfile.js
[22:37:25] ├── firstApp-task-1
[22:37:25] ├─┬ firstApp-task-2
[22:37:25] │ └── firstApp-task-1
[22:37:25] ├─┬ firstApp-task-3
[22:37:25] │ ├── firstApp-task-1
[22:37:25] │ └── firstApp-task-2
[22:37:25] ├── secondApp-task-1
[22:37:25] ├─┬ secondApp-task-2
[22:37:25] │ └── secondApp-task-1
[22:37:25] ├─┬ secondApp-task-3
[22:37:25] │ ├── secondApp-task-1
[22:37:25] │ └── secondApp-task-2
[22:37:25] ├── thirdApp-task-1
[22:37:25] ├─┬ thirdApp-task-2
[22:37:25] │ └── thirdApp-task-1
[22:37:25] └─┬ thirdApp-task-3
[22:37:25]   ├── thirdApp-task-1
[22:37:25]   └── thirdApp-task-2Running tasks
And now that we have the runners for the apps, we can invoke tasks:
// invoking task for our single app runner
runner.run('task-3');
// run for group in parallal.
groupRunner.run('task-3');
// or in sequence
groupRunner.runInSequence('task-3');###Example It's useful to expose base tasks and set more down the road:
gulp.task('build-enabled', (done) => {
    const myApps = require('./myApps.json') as IMyApp[];
    tasks.forAll(myApps.filter(app => app.enabled)).run('my-build-task').then(done);
});##Class Decorator
gulp-apps also has decorator support!
const GulpApp = gulpApps.use(gulp).getDecorator<IMyApp>();
@GulpApp()
class Tasks implements IAppContext<IMyApp> {
    constructor(public app : IMyApp) {}
    @GulpApp.task()
    public myTask() {}
    @GulpApp.task(['myTask'])
    public secondTask() {}
    @GulpApp.task(['secondTask'], 'diff-name')
    public thirdTask() {}
    @GulpApp.task(['diff-name'])
    public accessApp() {
        console.log(this.app.name);
    }
    @GulpApp.task(['accessApp', 'diff-name'])
    public accessPrivateMethods() {
        this.privateMethod();
    }
    private privateMethod() {
        console.log('this is not a gulp task');
        console.log(this.app.name);
    }
    @GulpApp.task(['accessPrivateMethods'])
    public default() {
    }
}
gulp.task('do-it', ()=> {
    GulpApp.getTasks().for({
        name: 'my-cool-app',
        dir: './',
        enabled: true
    })
        .run('default');
});