build(docs-infra): change `build-with-ivy` script to `switch-to-ivy` (#29989)

Previously, the `build-with-ivy` script could be used to build the `aio`
project with Ivy (once it had been prepared with `ivy-ngcc`, etc.) and
then restored the configuration (e.g. `tsconfig.json`) to non-ivy mode.

As a result, it was not useful for running other commands (e.g. unit/e2e
tests) in Ivy mode.

This commit renames the script to `switch-to-ivy` and employs a
different model (similar to `ng-packages-installer`), where the project
is setup to run in Ivy mode and then all subsequent commands are
executed in that mode (until restored).

Since this is currently only used on CI, there is no automatic way to
switch back to non-ivy mode (but it could be implemented in the future
if needed).

Finally, the script now modifies `src/tsconfig.app/json` instead of
`tsconfig.json` to ensure that the `angularCompilerOptions` are not
ignored/overwritten. This is also closer to what the cli generates
with the `--enable-ivy` option.

PR Close #29989
This commit is contained in:
George Kalpakas 2019-04-02 21:53:49 +03:00 committed by Ben Lesh
parent f957c7c1cd
commit 11eef85133
2 changed files with 16 additions and 17 deletions

View File

@ -17,8 +17,8 @@
"build": "yarn ~~build", "build": "yarn ~~build",
"prebuild-local": "yarn setup-local", "prebuild-local": "yarn setup-local",
"build-local": "yarn ~~build", "build-local": "yarn ~~build",
"prebuild-with-ivy": "yarn setup-local && yarn ivy-ngcc --properties module es2015", "prebuild-with-ivy": "yarn setup-local && node scripts/switch-to-ivy",
"build-with-ivy": "node scripts/build-with-ivy", "build-with-ivy": "yarn ~~build",
"extract-cli-command-docs": "node tools/transforms/cli-docs-package/extract-cli-commands.js 664990cad", "extract-cli-command-docs": "node tools/transforms/cli-docs-package/extract-cli-commands.js 664990cad",
"lint": "yarn check-env && yarn docs-lint && ng lint && yarn example-lint && yarn tools-lint", "lint": "yarn check-env && yarn docs-lint && ng lint && yarn example-lint && yarn tools-lint",
"test": "yarn check-env && ng test", "test": "yarn check-env && ng test",

View File

@ -10,12 +10,12 @@ set('-e');
// Constants // Constants
const ROOT_DIR = resolve(__dirname, '..'); const ROOT_DIR = resolve(__dirname, '..');
const TS_CONFIG_PATH = join(ROOT_DIR, 'tsconfig.json'); const TS_CONFIG_PATH = join(ROOT_DIR, 'src/tsconfig.app.json');
const NG_COMPILER_OPTS = { const NG_COMPILER_OPTS = {
angularCompilerOptions: { angularCompilerOptions: {
// Related Jira issue: FW-737 // Related Jira issue: FW-737
allowEmptyCodegenFiles: true, allowEmptyCodegenFiles: true,
enableIvy: 'ngtsc', enableIvy: true,
}, },
}; };
@ -23,24 +23,23 @@ const NG_COMPILER_OPTS = {
_main(process.argv.slice(2)); _main(process.argv.slice(2));
// Functions - Definitions // Functions - Definitions
function _main(buildArgs) { function _main() {
console.log('\nModifying `tsconfig.json`...'); // Enable Ivy in TS config.
console.log(`\nModifying \`${TS_CONFIG_PATH}\`...`);
const oldTsConfigStr = readFileSync(TS_CONFIG_PATH, 'utf8'); const oldTsConfigStr = readFileSync(TS_CONFIG_PATH, 'utf8');
const oldTsConfigObj = parse(oldTsConfigStr); const oldTsConfigObj = parse(oldTsConfigStr);
const newTsConfigObj = extend(true, oldTsConfigObj, NG_COMPILER_OPTS); const newTsConfigObj = extend(true, oldTsConfigObj, NG_COMPILER_OPTS);
const newTsConfigStr = JSON.stringify(newTsConfigObj, null, 2); const newTsConfigStr = JSON.stringify(newTsConfigObj, null, 2);
console.log(`\nNew config: ${newTsConfigStr}`);
writeFileSync(TS_CONFIG_PATH, newTsConfigStr); writeFileSync(TS_CONFIG_PATH, newTsConfigStr);
console.log(newTsConfigStr);
try { // Run ngcc.
const buildArgsStr = buildArgs.join(' '); const ngccArgs = '--loglevel debug --properties es2015 module';
console.log(`\nRunning ngcc (with args: ${ngccArgs})...`);
exec(`yarn ivy-ngcc ${ngccArgs}`);
console.log(`\nBuilding${buildArgsStr && ` with args \`${buildArgsStr}\``}...`); // Done.
exec(`yarn ~~build ${buildArgsStr}`, {cwd: ROOT_DIR}); console.log('\nReady to build with Ivy!');
} finally { console.log('(To switch back to ViewEngine (with packages from npm), undo the changes in ' +
console.log('\nRestoring `tsconfig.json`...'); `\`${TS_CONFIG_PATH}\` and run \`yarn aio-use-npm && yarn example-use-npm\`.)`);
writeFileSync(TS_CONFIG_PATH, oldTsConfigStr);
}
console.log('\nDone!');
} }