Skip to content

Commit 564477b

Browse files
committed
chore(build): migrate build.js.cjs to broccoli.
This doesn't do the typescript part of the build yet. Also there is a bit of hackiness left to resolve in a follow-up change.
1 parent 7e2c04e commit 564477b

6 files changed

Lines changed: 91 additions & 12 deletions

File tree

Brocfile-js_cjs.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
var Funnel = require('broccoli-funnel');
2+
var mergeTrees = require('broccoli-merge-trees');
3+
var stew = require('broccoli-stew');
4+
var TraceurCompiler = require('./tools/broccoli/traceur');
5+
var renderLodashTemplate = require('broccoli-lodash');
6+
7+
var modulesTree = new Funnel('modules', {include: ['**/**'], exclude: ['angular2/src/core/zone/vm_turn_zone.es6']});
8+
9+
// Use Traceur to transpile original sources to ES6
10+
var cjsTree = new TraceurCompiler(modulesTree, '.js', {
11+
sourceMaps: true,
12+
annotations: true, // parse annotations
13+
types: true, // parse types
14+
script: false, // parse as a module
15+
memberVariables: true, // parse class fields
16+
typeAssertionModule: 'rtts_assert/rtts_assert',
17+
// Don't use type assertions since this is partly transpiled by typescript
18+
typeAssertions: false,
19+
modules: 'commonjs'
20+
}, true);
21+
22+
// Munge the filenames since we use an '.es6' extension
23+
cjsTree = stew.rename(cjsTree, function(relativePath) {
24+
return relativePath.replace(/\.(js|es6)\.map$/, '.map').replace(/\.es6$/, '.js');
25+
});
26+
27+
// Now we add a few more files to the es6 tree that Traceur should not see
28+
['angular2', 'benchmarks', 'benchmarks_external', 'benchpress', 'examples', 'rtts_assert'].forEach(
29+
function(destDir) {
30+
var extras = new Funnel('.', {files: ['LICENSE'], destDir: destDir});
31+
cjsTree = mergeTrees([cjsTree, extras]);
32+
});
33+
34+
extras = new Funnel(modulesTree, {include: ['**/*.md', '**/*.png'], exclude: ['**/*.dart.md']});
35+
extras = stew.rename(extras, 'README.js.md', 'README.md');
36+
37+
var BASE_PACKAGE_JSON = require('./package.json');
38+
var COMMON_PACKAGE_JSON = {
39+
version: BASE_PACKAGE_JSON.version,
40+
homepage: BASE_PACKAGE_JSON.homepage,
41+
bugs: BASE_PACKAGE_JSON.bugs,
42+
license: BASE_PACKAGE_JSON.license,
43+
contributors: BASE_PACKAGE_JSON.contributors,
44+
dependencies: BASE_PACKAGE_JSON.dependencies,
45+
devDependencies: {
46+
"yargs": BASE_PACKAGE_JSON.devDependencies['yargs'],
47+
"gulp-sourcemaps": BASE_PACKAGE_JSON.devDependencies['gulp-sourcemaps'],
48+
"gulp-traceur": BASE_PACKAGE_JSON.devDependencies['gulp-traceur'],
49+
"gulp": BASE_PACKAGE_JSON.devDependencies['gulp'],
50+
"gulp-rename": BASE_PACKAGE_JSON.devDependencies['gulp-rename'],
51+
"through2": BASE_PACKAGE_JSON.devDependencies['through2']
52+
}
53+
};
54+
55+
// Add a .template extension since renderLodashTemplate strips one extension
56+
var packageJsons = stew.rename(new Funnel(modulesTree, {include: ['**/package.json']}), '.json', '.json.template');
57+
packageJsons = renderLodashTemplate(packageJsons, {
58+
files: ["**/**"],
59+
context: { 'packageJson': COMMON_PACKAGE_JSON }
60+
});
61+
62+
cjsTree = mergeTrees([cjsTree, extras, packageJsons]);
63+
64+
module.exports = stew.mv(cjsTree, 'js/cjs');

Brocfile-js_dev.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var replace = require('broccoli-replace');
77
var htmlReplace = require('./tools/broccoli/html-replace');
88
var path = require('path');
99

10-
var modulesTree = new Funnel('modules', {include: ['**/**'], destDir: '/'});
10+
var modulesTree = new Funnel('modules', {include: ['**/**'], exclude: ['**/*.cjs'], destDir: '/'});
1111

1212
// Use Traceur to transpile original sources to ES6
1313
var es6DevTree = new TraceurCompiler(modulesTree, '.es6', {

gulpfile.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,9 +773,13 @@ gulp.task('build.js.prod', function(done) {
773773
);
774774
});
775775

776+
gulp.task('broccoli.js.cjs', function() {
777+
return broccoliBuild(require('./Brocfile-js_cjs.js'), path.join('js', 'cjs'));
778+
});
776779
gulp.task('build.js.cjs', function(done) {
777780
runSequence(
778-
['build/transpile.js.cjs', 'build/copy.js.cjs', 'build/multicopy.js.cjs'],
781+
'broccoli.js.cjs',
782+
//['build/transpile.js.cjs', 'build/copy.js.cjs', 'build/multicopy.js.cjs'],
779783
// Overwrite the .js.cjs transpilation with typescript outputs
780784
// We still need traceur outputs everywhere else, for now.
781785
'build/transpile.ts.cjs',

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"broccoli": "^0.15.3",
4646
"broccoli-flatten": "^0.1.1",
4747
"broccoli-funnel": "igorminar/broccoli-funnel#perf-files",
48+
"broccoli-lodash": "^0.1.1",
4849
"broccoli-merge-trees": "^0.2.1",
4950
"broccoli-replace": "alexeagle/broccoli-replace#angular_patch",
5051
"broccoli-slow-trees": "^1.1.0",

tools/broccoli/traceur/index.js

Lines changed: 10 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/broccoli/traceur/index.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ var Writer = require('broccoli-writer');
77
var xtend = require('xtend');
88

99
class TraceurFilter extends Writer {
10-
constructor(private inputTree, private destExtension: string = '.js', private options = {}) {}
10+
constructor(private inputTree, private destExtension: string = '.js',
11+
private options = {}, private hackSourceMapExtension: boolean = false) {}
1112
static RUNTIME_PATH = traceur.RUNTIME_PATH;
1213
write(readTree, destDir) {
1314
return readTree(this.inputTree)
@@ -16,7 +17,7 @@ class TraceurFilter extends Writer {
1617
.filter(filepath =>
1718
{
1819
var extension = path.extname(filepath).toLowerCase();
19-
return extension === '.js' || extension === '.es6';
20+
return extension === '.js' || extension === '.es6' || extension === '.cjs';
2021
})
2122
.map(filepath => {
2223
var options = xtend({filename: filepath}, this.options);
@@ -28,14 +29,17 @@ class TraceurFilter extends Writer {
2829

2930
// TODO: we should fix the sourceMappingURL written by Traceur instead of overriding
3031
// (but we might switch to typescript first)
31-
result.js = result.js + '\n//# sourceMappingURL=./' +
32-
path.basename(filepath).replace(/\.es6$/, '') +
33-
(this.destExtension === '.js' ? '.js.map' : '.map');
32+
var url = path.basename(filepath).replace(/\.es6$/, '') +
33+
(this.destExtension === '.js' ? '.js.map' : '.map');
34+
if (this.hackSourceMapExtension) {
35+
url = path.basename(filepath).replace(/\.\w+$/, '') + '.map';
36+
}
37+
result.js = result.js + `\n//# sourceMappingURL=./${url}`;
3438

3539
var destFilepath = filepath.replace(/\.\w+$/, this.destExtension);
3640
var destFile = path.join(destDir, destFilepath);
3741
fse.mkdirsSync(path.dirname(destFile));
38-
var destMap = path.join(destDir, filepath + '.map');
42+
var destMap = path.join(destDir, destFilepath + '.map');
3943

4044

4145
fs.writeFileSync(destFile, result.js, fsOpts);

0 commit comments

Comments
 (0)