chore(build): move more broccoli support inside the TypeScript boundary
This commit is contained in:
parent
dbfc4c1c16
commit
34501aaae6
15
gulpfile.js
15
gulpfile.js
@ -1,5 +1,3 @@
|
||||
var broccoliBuild = require('./tools/broccoli/gulp');
|
||||
|
||||
var format = require('gulp-clang-format');
|
||||
var gulp = require('gulp');
|
||||
var gulpPlugins = require('gulp-load-plugins')();
|
||||
@ -33,7 +31,12 @@ var util = require('./tools/build/util');
|
||||
var bundler = require('./tools/build/bundle');
|
||||
var replace = require('gulp-replace');
|
||||
var insert = require('gulp-insert');
|
||||
var makeBroccoliTree = require('./tools/broccoli/make-broccoli-tree');
|
||||
|
||||
// dynamic require in build.broccoli.tools so we can bootstrap TypeScript compilation
|
||||
function missingDynamicBroccoli() {
|
||||
throw new Error('ERROR: build.broccoli.tools task should have been run before using broccoli');
|
||||
}
|
||||
var makeBroccoliTree = missingDynamicBroccoli, broccoliBuild = missingDynamicBroccoli;
|
||||
|
||||
// Note: when DART_SDK is not found, all gulp tasks ending with `.dart` will be skipped.
|
||||
|
||||
@ -769,7 +772,11 @@ gulp.task('build.dart', function(done) {
|
||||
gulp.task('build.broccoli.tools', function() {
|
||||
var tsResult = gulp.src('tools/broccoli/**/*.ts')
|
||||
.pipe(tsc({ target: 'ES5', module: 'commonjs' }));
|
||||
return tsResult.js.pipe(gulp.dest('dist/broccoli'));
|
||||
return tsResult.js.pipe(gulp.dest('dist/broccoli'))
|
||||
.on('end', function() {
|
||||
makeBroccoliTree = require('./dist/broccoli/make-broccoli-tree');
|
||||
broccoliBuild = require('./dist/broccoli/gulp');
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task('broccoli.js.dev', ['build.broccoli.tools'], function() {
|
||||
|
@ -1,5 +1,3 @@
|
||||
'use strict';
|
||||
|
||||
var broccoli = require('broccoli');
|
||||
var copyDereferenceSync = require('copy-dereference').sync;
|
||||
var fse = require('fs-extra');
|
||||
@ -32,45 +30,43 @@ function broccoliBuild(tree, outputRoot) {
|
||||
|
||||
var builder = new broccoli.Builder(tree);
|
||||
return builder.build()
|
||||
.then(function (hash) {
|
||||
console.log('=== Stats for %s (total: %ds) ===', outputRoot, Math.round(hash.totalTime/1000000)/1000);
|
||||
printSlowTrees(hash.graph);
|
||||
.then(function(hash) {
|
||||
console.log('=== Stats for %s (total: %ds) ===', outputRoot,
|
||||
Math.round(hash.totalTime / 1000000) / 1000);
|
||||
printSlowTrees(hash.graph);
|
||||
|
||||
var dir = hash.directory;
|
||||
try {
|
||||
time('Write build output', function() {
|
||||
copyDereferenceSync(path.join(dir, outputRoot), distPath);
|
||||
});
|
||||
} catch (err) {
|
||||
if (err.code === 'EEXIST') err.message += ' (we cannot build into an existing directory)';
|
||||
throw err;
|
||||
}
|
||||
})
|
||||
.finally(function () {
|
||||
time('Build cleanup', function() {
|
||||
builder.cleanup();
|
||||
var dir = hash.directory;
|
||||
try {
|
||||
time('Write build output', function() {
|
||||
copyDereferenceSync(path.join(dir, outputRoot), distPath);
|
||||
});
|
||||
} catch (err) {
|
||||
if (err.code === 'EEXIST') err.message += ' (we cannot build into an existing directory)';
|
||||
throw err;
|
||||
}
|
||||
})
|
||||
.finally(function() {
|
||||
time('Build cleanup', function() { builder.cleanup(); });
|
||||
|
||||
console.log('=== Done building %s ===', outputRoot);
|
||||
})
|
||||
.catch(function(err) {
|
||||
// Should show file and line/col if present
|
||||
if (err.file) {
|
||||
console.error('File: ' + err.file);
|
||||
}
|
||||
if (err.stack) {
|
||||
console.error(err.stack);
|
||||
} else {
|
||||
console.error(err);
|
||||
}
|
||||
console.error('\nBuild failed');
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
console.log('=== Done building %s ===', outputRoot);
|
||||
})
|
||||
.catch(function (err) {
|
||||
// Should show file and line/col if present
|
||||
if (err.file) {
|
||||
console.error('File: ' + err.file);
|
||||
}
|
||||
if (err.stack) {
|
||||
console.error(err.stack);
|
||||
} else {
|
||||
console.error(err);
|
||||
}
|
||||
console.error('\nBuild failed');
|
||||
process.exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function time(label, work) {
|
||||
|
||||
var start = Date.now();
|
||||
work();
|
||||
var duration = Date.now() - start;
|
@ -3,8 +3,9 @@ var path = require('path');
|
||||
|
||||
module.exports = read;
|
||||
function read(file) {
|
||||
var content = fs.readFileSync(path.join(__dirname, file + '.html'), {encoding: 'utf-8'});
|
||||
// TODO(broccoli): we don't really need this, it's here to make the output match the tools/build/html
|
||||
var content = fs.readFileSync(path.join('tools/broccoli/html-replace', file + '.html'),
|
||||
{encoding: 'utf-8'});
|
||||
// TODO(broccoli): we don't really need this, it's here to make the output match the
|
||||
// tools/build/html
|
||||
return content.substring(0, content.lastIndexOf("\n"));
|
||||
}
|
||||
|
@ -8,34 +8,33 @@ var path = require('path');
|
||||
var renderLodashTemplate = require('broccoli-lodash');
|
||||
var replace = require('broccoli-replace');
|
||||
var stew = require('broccoli-stew');
|
||||
var ts2dart;
|
||||
var TraceurCompiler;
|
||||
var TypescriptCompiler;
|
||||
var ts2dart = require('./broccoli-ts2dart');
|
||||
var TraceurCompiler = require('./traceur');
|
||||
var TypescriptCompiler = require('./typescript');
|
||||
|
||||
var projectRootDir = path.normalize(path.join(__dirname, '..', '..'));
|
||||
|
||||
|
||||
module.exports = function makeBroccoliTree(name) {
|
||||
if (!TraceurCompiler) TraceurCompiler = require('../../dist/broccoli/traceur');
|
||||
if (!TypescriptCompiler) TypescriptCompiler = require('../../dist/broccoli/typescript');
|
||||
if (!ts2dart) ts2dart = require('../../dist/broccoli/broccoli-ts2dart');
|
||||
|
||||
switch (name) {
|
||||
case 'dev': return makeBrowserTree({name: name, typeAssertions: true});
|
||||
case 'prod': return makeBrowserTree({name: name, typeAssertions: false});
|
||||
case 'cjs': return makeCjsTree();
|
||||
case 'dart': return makeDartTree();
|
||||
default: throw new Error('Unknown build type: ' + name);
|
||||
case 'dev':
|
||||
return makeBrowserTree({name: name, typeAssertions: true});
|
||||
case 'prod':
|
||||
return makeBrowserTree({name: name, typeAssertions: false});
|
||||
case 'cjs':
|
||||
return makeCjsTree();
|
||||
case 'dart':
|
||||
return makeDartTree();
|
||||
default:
|
||||
throw new Error('Unknown build type: ' + name);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function makeBrowserTree(options) {
|
||||
var modulesTree = new Funnel('modules', {
|
||||
include: ['**/**'],
|
||||
exclude: ['**/*.cjs', 'benchmarks/e2e_test/**'],
|
||||
destDir: '/'
|
||||
});
|
||||
var modulesTree = new Funnel(
|
||||
'modules',
|
||||
{include: ['**/**'], exclude: ['**/*.cjs', 'benchmarks/e2e_test/**'], destDir: '/'});
|
||||
|
||||
// Use Traceur to transpile original sources to ES6
|
||||
var es6Tree = new TraceurCompiler(modulesTree, '.es6', '.map', {
|
||||
@ -52,14 +51,14 @@ function makeBrowserTree(options) {
|
||||
|
||||
|
||||
// Call Traceur again to lower the ES6 build tree to ES5
|
||||
var es5Tree = new TraceurCompiler(es6Tree, '.js', '.js.map', {modules: 'instantiate', sourceMaps: true});
|
||||
var es5Tree =
|
||||
new TraceurCompiler(es6Tree, '.js', '.js.map', {modules: 'instantiate', sourceMaps: true});
|
||||
|
||||
// Now we add a few more files to the es6 tree that Traceur should not see
|
||||
['angular2', 'rtts_assert'].forEach(
|
||||
function (destDir) {
|
||||
var extras = new Funnel('tools/build', {files: ['es5build.js'], destDir: destDir});
|
||||
es6Tree = mergeTrees([es6Tree, extras]);
|
||||
});
|
||||
['angular2', 'rtts_assert'].forEach(function(destDir) {
|
||||
var extras = new Funnel('tools/build', {files: ['es5build.js'], destDir: destDir});
|
||||
es6Tree = mergeTrees([es6Tree, extras]);
|
||||
});
|
||||
|
||||
|
||||
var vendorScriptsTree = flatten(new Funnel('.', {
|
||||
@ -76,9 +75,9 @@ function makeBrowserTree(options) {
|
||||
]
|
||||
}));
|
||||
var vendorScripts_benchmark =
|
||||
new Funnel('tools/build/snippets', {files: ['url_params_to_form.js'], destDir: '/'});
|
||||
new Funnel('tools/build/snippets', {files: ['url_params_to_form.js'], destDir: '/'});
|
||||
var vendorScripts_benchmarks_external =
|
||||
new Funnel('node_modules/angular', {files: ['angular.js'], destDir: '/'});
|
||||
new Funnel('node_modules/angular', {files: ['angular.js'], destDir: '/'});
|
||||
|
||||
var servingTrees = [];
|
||||
|
||||
@ -89,7 +88,7 @@ function makeBrowserTree(options) {
|
||||
}
|
||||
if (destDir.indexOf('benchmarks_external') > -1) {
|
||||
servingTrees.push(
|
||||
new Funnel(vendorScripts_benchmarks_external, {srcDir: '/', destDir: destDir}));
|
||||
new Funnel(vendorScripts_benchmarks_external, {srcDir: '/', destDir: destDir}));
|
||||
}
|
||||
}
|
||||
|
||||
@ -117,7 +116,7 @@ function makeBrowserTree(options) {
|
||||
|
||||
// Copy all vendor scripts into all examples and benchmarks
|
||||
['benchmarks/src', 'benchmarks_external/src', 'examples/src/benchpress'].forEach(
|
||||
copyVendorScriptsTo);
|
||||
copyVendorScriptsTo);
|
||||
|
||||
var scripts = mergeTrees(servingTrees, {overwrite: true});
|
||||
var css = new Funnel(modulesTree, {include: ["**/*.css"]});
|
||||
@ -161,11 +160,10 @@ function makeCjsTree() {
|
||||
});
|
||||
|
||||
// Now we add the LICENSE file into all the folders that will become npm packages
|
||||
outputPackages.forEach(
|
||||
function(destDir) {
|
||||
var license = new Funnel('.', {files: ['LICENSE'], destDir: destDir});
|
||||
cjsTree = mergeTrees([cjsTree, license]);
|
||||
});
|
||||
outputPackages.forEach(function(destDir) {
|
||||
var license = new Funnel('.', {files: ['LICENSE'], destDir: destDir});
|
||||
cjsTree = mergeTrees([cjsTree, license]);
|
||||
});
|
||||
|
||||
// Get all docs and related assets and prepare them for js build
|
||||
var docs = new Funnel(modulesTree, {include: ['**/*.md', '**/*.png'], exclude: ['**/*.dart.md']});
|
||||
@ -191,11 +189,10 @@ function makeCjsTree() {
|
||||
};
|
||||
|
||||
// Add a .template extension since renderLodashTemplate strips one extension
|
||||
var packageJsons = stew.rename(new Funnel(modulesTree, {include: ['**/package.json']}), '.json', '.json.template');
|
||||
packageJsons = renderLodashTemplate(packageJsons, {
|
||||
files: ["**/**"],
|
||||
context: { 'packageJson': COMMON_PACKAGE_JSON }
|
||||
});
|
||||
var packageJsons = stew.rename(new Funnel(modulesTree, {include: ['**/package.json']}), '.json',
|
||||
'.json.template');
|
||||
packageJsons = renderLodashTemplate(
|
||||
packageJsons, {files: ["**/**"], context: {'packageJson': COMMON_PACKAGE_JSON}});
|
||||
|
||||
|
||||
var typescriptTree = new TypescriptCompiler(modulesTree, {
|
||||
@ -251,7 +248,7 @@ function makeDartTree() {
|
||||
return path.join.apply(path, parts);
|
||||
}
|
||||
}
|
||||
throw new Error('Failed to match any path', relativePath);
|
||||
throw new Error('Failed to match any path: ' + relativePath);
|
||||
});
|
||||
|
||||
// Move the tree under the 'dart' folder.
|
Loading…
x
Reference in New Issue
Block a user