-
Notifications
You must be signed in to change notification settings - Fork 6.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
build: run closure-compiler #3789
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
#!/bin/bash | ||
|
||
# Script that bundles the dev-app using the Google Closure compiler. | ||
# This is script is used to verify closure-compatiblity of all Material components. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. it only does the first bits of closure verification of course, we don't know if the property renaming did the right thing. can we also run some of the integration tests on the result (or does this PR do that?) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This PR just bundles our demo-app that uses Angular Material. So not really sure if this is enough for the variable renaming. Can be a follow-up? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd like to run Closure Compiler over the e2e-app and run the e2e tests over that in order to ensure that everything is working; I think this PR is a good first step to ensure that that the code at least passes. |
||
|
||
set -e -o pipefail | ||
|
||
# Go to the project root directory | ||
cd $(dirname $0)/../.. | ||
|
||
# Build the demo-app and also create the release output. | ||
$(npm bin)/gulp build:devapp | ||
$(npm bin)/gulp :package:release | ||
|
||
# Rebuild demo-app with ES2015 modules. Closure compiler is then able to parse imports. | ||
$(npm bin)/tsc -p src/demo-app/ --target ES2015 --module ES2015 | ||
|
||
# Re-compile RxJS sources into ES2015. Otherwise closure compiler can't parse it properly. | ||
$(npm bin)/ngc -p scripts/closure-compiler/tsconfig-rxjs.json | ||
|
||
# Create a list of all RxJS source files. | ||
rxjsSourceFiles=$(find dist/packages/rxjs -name '*.js'); | ||
|
||
# Due a Closure Compiler issue https://github.com/google/closure-compiler/issues/2247 | ||
# we need to add exports to the different RxJS ES2015 files. | ||
for i in $rxjsSourceFiles; do | ||
echo "export var __CLOSURE_WORKAROUND__" >> $i | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. yeah I guess I didn't encode the workaround into angular or my example app because we didn't happen to load one of the rx operators? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, we are using a few and those couldn't be imported. Took me a while to find that issue :) |
||
done | ||
|
||
OPTS=( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. now that we use a flagfile maybe it would be better to formulate this with
instead of a bash array? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not really sure. I just tried it and it didn't look very pretty inside of the Bash script. I might be doing something wrong? What advantage does it have? |
||
"--language_in=ES6_STRICT" | ||
"--language_out=ES5" | ||
"--compilation_level=ADVANCED_OPTIMIZATIONS" | ||
"--js_output_file=dist/closure/closure-bundle.js" | ||
"--variable_renaming_report=dist/closure/variable_renaming_report" | ||
"--property_renaming_report=dist/closure/property_renaming_report" | ||
"--warning_level=QUIET" | ||
"--rewrite_polyfills=false" | ||
|
||
# List of path prefixes to be removed from ES6 & CommonJS modules. | ||
"--js_module_root=dist/packages" | ||
"--js_module_root=dist/release" | ||
"--js_module_root=node_modules/@angular/core" | ||
"--js_module_root=node_modules/@angular/common" | ||
"--js_module_root=node_modules/@angular/compiler" | ||
"--js_module_root=node_modules/@angular/forms" | ||
"--js_module_root=node_modules/@angular/http" | ||
"--js_module_root=node_modules/@angular/router" | ||
"--js_module_root=node_modules/@angular/platform-browser" | ||
"--js_module_root=node_modules/@angular/platform-browser/animations" | ||
"--js_module_root=node_modules/@angular/platform-browser-dynamic" | ||
"--js_module_root=node_modules/@angular/animations" | ||
"--js_module_root=node_modules/@angular/animations/browser" | ||
|
||
# Flags to simplify debugging. | ||
"--formatting=PRETTY_PRINT" | ||
"--debug" | ||
|
||
# Include the Material FESM bundle | ||
dist/release/@angular/material.js | ||
|
||
# Include all Angular FESM bundles. | ||
node_modules/@angular/core/@angular/core.js | ||
node_modules/@angular/common/@angular/common.js | ||
node_modules/@angular/compiler/@angular/compiler.js | ||
node_modules/@angular/forms/@angular/forms.js | ||
node_modules/@angular/http/@angular/http.js | ||
node_modules/@angular/router/@angular/router.js | ||
node_modules/@angular/platform-browser/@angular/platform-browser.js | ||
node_modules/@angular/platform-browser/@angular/platform-browser/animations.js | ||
node_modules/@angular/platform-browser-dynamic/@angular/platform-browser-dynamic.js | ||
node_modules/@angular/animations/@angular/animations.js | ||
node_modules/@angular/animations/@angular/animations/browser.js | ||
|
||
# Include other dependencies like Zone.js and RxJS | ||
node_modules/zone.js/dist/zone.js | ||
$rxjsSourceFiles | ||
|
||
# Include all files from the demo-app package. | ||
$(find dist/packages/demo-app -name '*.js') | ||
|
||
"--entry_point=./dist/packages/demo-app/main.js" | ||
"--dependency_mode=STRICT" | ||
) | ||
|
||
# Write closure flags to a closure flagfile. | ||
closureFlags=$(mktemp) | ||
echo ${OPTS[*]} > $closureFlags | ||
|
||
# Run the Google Closure compiler java runnable. | ||
java -jar node_modules/google-closure-compiler/compiler.jar --flagfile $closureFlags |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. maybe extend from the tsconfig.json in rxjs sources? Shouldn't you share most of their options? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah would be nice, but unfortunately RxJS doesn't ship their |
||
"compilerOptions": { | ||
"module": "es2015", | ||
"outDir": "../../dist/packages/rxjs", | ||
"target": "es2015", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. actually the target should be es5 - that's what they are likely to ship There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sounds good. |
||
"lib": ["es2015", "dom"] | ||
}, | ||
"files": [ | ||
"../../node_modules/rxjs/src/Rx.ts" | ||
], | ||
"angularCompilerOptions": { | ||
"annotateForClosureCompiler": true, | ||
"skipMetadataEmit": true, | ||
"skipTemplateCodegen": true | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I assume you use npm shrinkwrap to avoid surprises when the version moves?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We are only using a
yarn.lock
. But yeah might be a good idea to introduce such a file. @jelbourn for confirmation?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I haven't experienced issues with this such that I have an opinion one way or the other. Is it reasonable to leave it until we run into a problem?