angular-cn/tools/build/es5build.js

79 lines
2.2 KiB
JavaScript
Executable File

#!/usr/bin/env node
// Attention: This file will be distributed with our npm packages!
var gulp = require('gulp');
var traceur = require('gulp-traceur');
var rename = require('gulp-rename');
var sourcemaps = require('gulp-sourcemaps');
var through2 = require('through2');
var fs = require('fs');
var path = require('path');
module.exports = run;
if (!module.parent) {
var argv = require('yargs')
.usage('Transpile to es5.\n\n'+
'Usage: $0 -m [format] -s [folder] -d [folder]')
.example('$0 -d tmp', 'transpile in `instantate` format to tmp/')
.options({
's': {
alias: 'source',
describe: 'source folder',
default: '.'
},
'd': {
alias: 'dest',
describe: 'output folder',
demand: true
},
'm': {
alias: 'modules',
describe: 'module format, https://github.com/google/traceur-compiler/wiki/Options-for-Compiling',
default: 'instantiate'
}
})
.help('help')
.wrap(40)
.strict()
.argv
;
run({
src: argv.s,
dest: argv.d,
modules: argv.m
});
}
function run(config) {
var src = ['!node_modules', '!node_modules/**', './**/*.es6'];
return gulp.src(src, {cwd: config.src})
.pipe(rename(function(file) {
file.extname = file.extname.replace('.es6', '.js');
}))
// TODO(tbosch): Using sourcemaps.init({loadMaps:true}) does not combine
// the sourcemaps correctly!
.pipe(sourcemaps.init())
.pipe(through2.obj(function(file, encoding, done) {
var self = this;
fs.readFile(file.path.replace('.js', '.map'), function(error, buffer) {
if (error) {
return done(error);
}
file.sourceMap = JSON.parse(buffer.toString());
// The filename needs to be the same as the one that is transpiled
// so that gulp-sourcemaps can update the mapping
file.sourceMap.file = file.relative;
file.sourceMap.sourceRoot = path.dirname(file.relative);
self.push(file);
done();
});
}))
.pipe(traceur({
modules: config.modules,
sourceMaps: true
}))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest(config.dest));
};