chore(build): use a Filter plugin to write the dest folder.
This lets broccoli keep the dest folder up-to-date in 'watch' mode, so we should be able to use that for Karma.
This commit is contained in:
parent
3667854a8f
commit
70433e6b73
|
@ -43,6 +43,7 @@
|
||||||
"angular": "1.3.5",
|
"angular": "1.3.5",
|
||||||
"bower": "^1.3.12",
|
"bower": "^1.3.12",
|
||||||
"broccoli": "^0.15.3",
|
"broccoli": "^0.15.3",
|
||||||
|
"broccoli-filter": "^0.1.12",
|
||||||
"broccoli-flatten": "^0.1.1",
|
"broccoli-flatten": "^0.1.1",
|
||||||
"broccoli-funnel": "igorminar/broccoli-funnel#perf-files",
|
"broccoli-funnel": "igorminar/broccoli-funnel#perf-files",
|
||||||
"broccoli-lodash": "^0.1.1",
|
"broccoli-lodash": "^0.1.1",
|
||||||
|
@ -52,7 +53,6 @@
|
||||||
"broccoli-stew": "^0.2.1",
|
"broccoli-stew": "^0.2.1",
|
||||||
"broccoli-writer": "^0.1.1",
|
"broccoli-writer": "^0.1.1",
|
||||||
"canonical-path": "0.0.2",
|
"canonical-path": "0.0.2",
|
||||||
"copy-dereference": "^1.0.0",
|
|
||||||
"css": "mlaval/css#issue65",
|
"css": "mlaval/css#issue65",
|
||||||
"del": "~1",
|
"del": "~1",
|
||||||
"dgeni": "^0.4.1",
|
"dgeni": "^0.4.1",
|
||||||
|
@ -95,8 +95,8 @@
|
||||||
"temp": "^0.8.1",
|
"temp": "^0.8.1",
|
||||||
"ternary-stream": "^1.2.3",
|
"ternary-stream": "^1.2.3",
|
||||||
"through2": "^0.6.1",
|
"through2": "^0.6.1",
|
||||||
"typescript": "alexeagle/TypeScript#93dbbe2a2d0b42cefd02ac949e4bc8ab6b5b5823",
|
|
||||||
"ts2dart": "^0.3.0",
|
"ts2dart": "^0.3.0",
|
||||||
|
"typescript": "alexeagle/TypeScript#93dbbe2a2d0b42cefd02ac949e4bc8ab6b5b5823",
|
||||||
"vinyl": "^0.4.6",
|
"vinyl": "^0.4.6",
|
||||||
"walk-sync": "^0.1.3",
|
"walk-sync": "^0.1.3",
|
||||||
"xtend": "^4.0.0",
|
"xtend": "^4.0.0",
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
/// <reference path="./broccoli-filter.d.ts" />
|
||||||
|
/// <reference path="../typings/node/node.d.ts" />
|
||||||
|
/// <reference path="../typings/fs-extra/fs-extra.d.ts" />
|
||||||
|
|
||||||
|
import Filter = require('broccoli-filter');
|
||||||
|
import fse = require('fs-extra');
|
||||||
|
import path = require('path');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Intercepts each file as it is copied to the destination tempdir,
|
||||||
|
* and tees a copy to the given path outside the tmp dir.
|
||||||
|
*/
|
||||||
|
class DestCopy extends Filter {
|
||||||
|
constructor(private inputTree, private outputRoot: string) { super(inputTree); }
|
||||||
|
|
||||||
|
getDestFilePath(relativePath: string): string { return relativePath; }
|
||||||
|
|
||||||
|
processString(content: string, relativePath: string): string { return content; }
|
||||||
|
|
||||||
|
processFile(srcDir, destDir, relativePath): Promise<any> {
|
||||||
|
return super.processFile(srcDir, destDir, relativePath)
|
||||||
|
.then(x => {
|
||||||
|
var destFile = path.join(this.outputRoot, this.getDestFilePath(relativePath));
|
||||||
|
var dir = path.dirname(destFile);
|
||||||
|
fse.mkdirsSync(dir);
|
||||||
|
fse.copySync(path.join(srcDir, relativePath), destFile);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export = function destCopy(inputTree, outputRoot) {
|
||||||
|
return new DestCopy(inputTree, outputRoot);
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
/// <reference path="../typings/es6-promise/es6-promise.d.ts" />
|
||||||
|
|
||||||
|
|
||||||
|
declare class Filter {
|
||||||
|
constructor(inputTree: any);
|
||||||
|
processString(contents: string, relativePath: string): string;
|
||||||
|
// NB: This function is probably not intended as part of the public API
|
||||||
|
processFile(srcDir: string, destDir: string, relativePath: string): Promise<any>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export = Filter;
|
|
@ -1,5 +1,5 @@
|
||||||
var broccoli = require('broccoli');
|
var broccoli = require('broccoli');
|
||||||
var copyDereferenceSync = require('copy-dereference').sync;
|
var destCopy = require('../broccoli-dest-copy');
|
||||||
var fse = require('fs-extra');
|
var fse = require('fs-extra');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var printSlowTrees = require('broccoli-slow-trees');
|
var printSlowTrees = require('broccoli-slow-trees');
|
||||||
|
@ -26,31 +26,23 @@ function broccoliBuild(tree, outputRoot) {
|
||||||
// We do a clean build every time to avoid stale outputs.
|
// We do a clean build every time to avoid stale outputs.
|
||||||
// Broccoli's cache folders allow it to remain incremental without reading this dir.
|
// Broccoli's cache folders allow it to remain incremental without reading this dir.
|
||||||
fse.removeSync(distPath);
|
fse.removeSync(distPath);
|
||||||
fse.mkdirsSync(path.join(distPath, '..'));
|
|
||||||
|
tree = destCopy(tree, 'dist');
|
||||||
|
|
||||||
var builder = new broccoli.Builder(tree);
|
var builder = new broccoli.Builder(tree);
|
||||||
return builder.build()
|
return builder.build()
|
||||||
.then(function(hash) {
|
.then(hash =>
|
||||||
|
{
|
||||||
console.log('=== Stats for %s (total: %ds) ===', outputRoot,
|
console.log('=== Stats for %s (total: %ds) ===', outputRoot,
|
||||||
Math.round(hash.totalTime / 1000000) / 1000);
|
Math.round(hash.totalTime / 1000000) / 1000);
|
||||||
printSlowTrees(hash.graph);
|
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() {
|
.finally(() =>
|
||||||
time('Build cleanup', function() { builder.cleanup(); });
|
{
|
||||||
|
time('Build cleanup', () => builder.cleanup());
|
||||||
console.log('=== Done building %s ===', outputRoot);
|
console.log('=== Done building %s ===', outputRoot);
|
||||||
})
|
})
|
||||||
.catch(function(err) {
|
.catch(err => {
|
||||||
// Should show file and line/col if present
|
// Should show file and line/col if present
|
||||||
if (err.file) {
|
if (err.file) {
|
||||||
console.error('File: ' + err.file);
|
console.error('File: ' + err.file);
|
||||||
|
|
|
@ -37,7 +37,7 @@ class TraceurFilter extends Writer {
|
||||||
// TODO: we should fix the sourceMappingURL written by Traceur instead of overriding
|
// TODO: we should fix the sourceMappingURL written by Traceur instead of overriding
|
||||||
// (but we might switch to typescript first)
|
// (but we might switch to typescript first)
|
||||||
var mapFilepath = filepath.replace(/\.\w+$/, '') + this.destSourceMapExtension;
|
var mapFilepath = filepath.replace(/\.\w+$/, '') + this.destSourceMapExtension;
|
||||||
result.js = result.js + '\n //# sourceMappingURL=./' + path.basename(mapFilepath);
|
result.js = result.js + '\n//# sourceMappingURL=./' + path.basename(mapFilepath);
|
||||||
|
|
||||||
var destFilepath = filepath.replace(/\.\w+$/, this.destExtension);
|
var destFilepath = filepath.replace(/\.\w+$/, this.destExtension);
|
||||||
var destFile = path.join(destDir, destFilepath);
|
var destFile = path.join(destDir, destFilepath);
|
||||||
|
|
Loading…
Reference in New Issue