nt-arcane
Version:
App creator for arcane framework.
135 lines (116 loc) • 4.13 kB
JavaScript
var gulp = require('gulp'),
arcane_gulp = require('gulp-arcane'),
async = require('async'),
fork = require( 'child_process' ).fork,
gutil = require( 'gulp-util' ),
concat = require('gulp-concat'),
uglify = require('gulp-uglify'),
lib = require('bower-files')(),
cleanCSS = require('gulp-clean-css'),
less = require('gulp-less'),
inject = require('gulp-inject'),
flatten = require('gulp-flatten'),
typescript = require('gulp-tsc');
/************************************************************
* Add your NPM frontend javascript file here.
*/
var node_js_files = [
'node_modules/systemjs/dist/system-polyfills.js',
'node_modules/angular2/bundles/angular2-polyfills.js',
'node_modules/systemjs/dist/system.src.js',
'node_modules/rxjs/bundles/Rx.js',
'node_modules/angular2/bundles/angular2.dev.js'
];
/*###########################################################*/
/***********************************************************
* Gulp process below.
############################################################*/
gulp.task('controller-model-ts', function() {
return gulp.src('controller/**/models/*.ts')
.pipe(arcane_gulp.DefineGeneratorModel(__dirname))
});
gulp.task('global-model-ts', function() {
return gulp.src('models/*.ts')
.pipe(arcane_gulp.DefineGeneratorModel(__dirname))
});
gulp.task('watch', ['default'], function() {
gulp.watch(['controller/**/models/*.ts'], ['controller-model-ts']);
gulp.watch(['models/*.ts'], ['global-model-ts']);
gulp.watch(['assets/**/*.js', 'assets/**/*.css', 'views/*.html', 'views/**/*.html'], ['inject']);
gulp.watch(['bower_components/**/*.js', 'bower_components/**/*.css'], ['bower-compile']);
});
var app = {
instance: {},
path: 'app.js',
start: function( callback ) {
process.execArgv.push( '--harmony-proxies' );
app.instance = fork( app.path, { silent: true, env: app.env } );
app.instance.stdout.pipe( process.stdout );
app.instance.stderr.pipe( process.stderr );
if( callback ) callback();
}
};
gulp.task( 'server', function( callback ) {
async.series([
app.start,
], callback );
});
gulp.task( 'bower-js', function() {
var files = lib.match('**/*.js').match('!**/*.min.js').files;
node_js_files.filter(function(val) {
files.push(__dirname + '/' + val);
});
return gulp.src(files)
.pipe(concat('scripts.min.js'))
.pipe(uglify())
.pipe(gulp.dest('assets/js'));
});
gulp.task( 'bower-css', function() {
return gulp.src(lib.match('**/*.css').match('!**/*.min.css').files)
.pipe(concat('style.min.css'))
.pipe(cleanCSS({compatibility: 'ie8'}))
.pipe(gulp.dest('assets/css'));
});
gulp.task( 'bower-less', function() {
return gulp.src(lib.match('**/*.less').match('!**/*.min.less').files)
.pipe(concat('style.min.css'))
.pipe(less())
.pipe(cleanCSS({compatibility: 'ie8'}))
.pipe(gulp.dest('assets/css'));
});
gulp.task('bower-fonts', function() {
return gulp.src('bower_components/**/fonts/*.{eot,svg,ttf,woff}')
.pipe(flatten())
.pipe(gulp.dest('assets/fonts'));
});
gulp.task('inject', function () {
var target = gulp.src(['views/*.html', 'views/**/*.html']);
var sources = gulp.src(['assets/js/**/*.js', 'assets/css/**/*.css'], {read: false});
return target.pipe(inject(sources, {
relative: false,
transform: function (filepath) {
arguments[0] = filepath.replace(/\/assets\//g, '');
return inject.transform.apply(inject.transform, arguments);
}
}))
.pipe(gulp.dest('views'));
});
gulp.task('typescript-compile', function() {
gulp.src(['components/**/*.ts', 'components/*.ts'])
.pipe(typescript({
module: 'system',
target: 'ES5',
sourceMap: true,
emitDecoratorMetadata: true,
experimentalDecorators: true,
moduleResolution: 'node',
removeComments: false,
noImplicitAny: true,
suppressImplicitAnyIndexErrors: true,
noLib: false,
emitError: false
}))
.pipe(gulp.dest('assets/app'))
});
gulp.task('bower-compile', ['bower-js', 'bower-css', 'bower-less', 'bower-fonts']);
gulp.task('default', ['server', 'inject', 'bower-compile', 'global-model-ts', 'controller-model-ts', 'typescript-compile']);