From 2a0f497e9497fb415336da58be0cdfa26d008a3d Mon Sep 17 00:00:00 2001 From: Keen Yee Liau Date: Tue, 7 May 2019 12:32:49 -0700 Subject: [PATCH] fix(bazel): Directly spawn native Bazel binary (#30306) Instead of launching a Node.js process that in turn spawns Bazel binary, the Builder could now directly spawn the native binary. This makes the bootup process slightly more efficient, and allows the Builder to control spawn options. This works with both Bazel and iBazel. PR Close #30306 --- packages/bazel/src/builders/bazel.ts | 8 ++++---- packages/bazel/src/builders/files/__dot__bazelrc.template | 2 ++ packages/bazel/src/schematics/ng-add/index.ts | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/bazel/src/builders/bazel.ts b/packages/bazel/src/builders/bazel.ts index 547d882103..5a15c6503f 100644 --- a/packages/bazel/src/builders/bazel.ts +++ b/packages/bazel/src/builders/bazel.ts @@ -8,7 +8,7 @@ /// -import {fork} from 'child_process'; +import {spawn} from 'child_process'; import {copyFileSync, existsSync, readdirSync, statSync, unlinkSync} from 'fs'; import {dirname, join, normalize} from 'path'; @@ -24,7 +24,7 @@ export function runBazel( projectDir = normalize(projectDir); binary = normalize(binary); return new Promise((resolve, reject) => { - const buildProcess = fork(binary, [command, workspaceTarget, ...flags], { + const buildProcess = spawn(binary, [command, workspaceTarget, ...flags], { cwd: projectDir, stdio: 'inherit', }); @@ -51,12 +51,12 @@ export function runBazel( */ export function checkInstallation(name: Executable, projectDir: string): string { projectDir = normalize(projectDir); - const packageName = `@bazel/${name}/package.json`; + const packageName = `@bazel/${name}`; try { const bazelPath = require.resolve(packageName, { paths: [projectDir], }); - return dirname(bazelPath); + return require(bazelPath).getNativeBinary(); } catch (error) { if (error.code === 'MODULE_NOT_FOUND') { throw new Error( diff --git a/packages/bazel/src/builders/files/__dot__bazelrc.template b/packages/bazel/src/builders/files/__dot__bazelrc.template index 1b544399da..486c9ef1ba 100644 --- a/packages/bazel/src/builders/files/__dot__bazelrc.template +++ b/packages/bazel/src/builders/files/__dot__bazelrc.template @@ -23,6 +23,8 @@ build --incompatible_strict_action_env run --incompatible_strict_action_env test --incompatible_strict_action_env +build --incompatible_bzl_disallow_load_after_statement=false + test --test_output=errors # Use the Angular 6 compiler diff --git a/packages/bazel/src/schematics/ng-add/index.ts b/packages/bazel/src/schematics/ng-add/index.ts index 842e41b672..9a77610a55 100755 --- a/packages/bazel/src/schematics/ng-add/index.ts +++ b/packages/bazel/src/schematics/ng-add/index.ts @@ -48,8 +48,8 @@ function addDevDependenciesToPackageJson(options: Schema) { const devDependencies: {[k: string]: string} = { '@angular/bazel': angularCoreVersion, - '@bazel/bazel': '^0.24.0', - '@bazel/ibazel': '^0.10.1', + '@bazel/bazel': '^0.25.1', + '@bazel/ibazel': '^0.10.2', '@bazel/karma': '0.27.12', '@bazel/typescript': '0.27.12', };