ES4 style packaging, namespacing, and dependency implementation in JavaScript for GULP.
$ npm install --save-dev gulp-packagingjs
var gulp = require('gulp');
var gulp_packagingjs = require('gulp-packagingjs');
gulp.task('packagingjs', function()
{
var input = './sources/*.js';
var output = './compiled/';
return gulp
.src(input)
.pipe(gulp_packagingjs({strict:true, autorun:'instance', roots:['./sources/']}))
.pipe(gulp.dest(output));
});
gulp.task('default', ['packagingjs']);
var gulp = require('gulp');
var gulp_packagingjs = require('gulp-packagingjs');
var sourcemaps = require('gulp-sourcemaps');
gulp.task('packagingjs', function()
{
var input = './sources/*.js';
var output = './compiled/';
return gulp
.src(input)
.pipe(sourcemaps.init())
.pipe(gulp_packagingjs({strict:true, autorun:'instance', roots:['./sources/']}))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest(output));
});
gulp.task('default', ['packagingjs']);
See the packagingjs npm module for documentation on PackagingJS itself. The functionality is the same except for some differences noted here.
-
Do not make your output folder the same as the source folder. The files output with the same name...so you can see how that wouldn't work.
-
Only have your path/glob point to files you want to use as base classes.
-
Unlike normal packagingjs you do not give a name of the the base class when calling the function, just give your compiling options. This is because for GULP it can accept a glob that points to multiple, meaning multiple base classes getting compiled.
-
To facilitate #3 (making multiple base classes) you just point the glob to those class files...but that also means you lose control over namespacing for those base classes. So when using gulp-packagingjs you must make all of your base classes non-namespaced. Their dependencies all work as normal though, only the one base class per compilation has this limitation.
-
Filenames for input will be same as output for each base class file compiled, so it is suggested that you use descriptive class naming, e.g. "HomePage.js" and "SpaceshipGame.js"