build: add a before-all-other bootstrap script that patches require (#34736)

This removes the churn in the existing bootstrap scripts.

PR Close #34736
This commit is contained in:
Greg Magolan 2020-01-08 01:14:27 -08:00 committed by Matias Niemelä
parent e0827f2ad5
commit 81f6da173b
10 changed files with 34 additions and 43 deletions

View File

@ -6,12 +6,6 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
// bootstrap the bazel require patch since this bootstrap script is loaded with
// `--node_options=--require=$(rlocation $(location script.js))`
if (process.env['BAZEL_NODE_RUNFILES_HELPER']) {
require(process.env['BAZEL_NODE_RUNFILES_HELPER'] as string).patchRequire();
}
// Needed to run animation tests // Needed to run animation tests
import 'zone.js/lib/node/rollup-main'; import 'zone.js/lib/node/rollup-main';
import '@angular/compiler'; // For JIT mode. Must be in front of any other @angular/* imports. import '@angular/compiler'; // For JIT mode. Must be in front of any other @angular/* imports.

View File

@ -6,12 +6,6 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
// bootstrap the bazel require patch since this bootstrap script is loaded with
// `--node_options=--require=$(rlocation $(location script.js))`
if (process.env['BAZEL_NODE_RUNFILES_HELPER']) {
require(process.env['BAZEL_NODE_RUNFILES_HELPER'] as string).patchRequire();
}
// Must be loaded before zone loads, so that zone can detect WTF. // Must be loaded before zone loads, so that zone can detect WTF.
import './test_fake_polyfill'; import './test_fake_polyfill';

View File

@ -13,12 +13,6 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
// bootstrap the bazel require patch since this bootstrap script is loaded with
// `--node_options=--require=$(rlocation $(location script.js))`
if (process.env['BAZEL_NODE_RUNFILES_HELPER']) {
require(process.env['BAZEL_NODE_RUNFILES_HELPER'] as string).patchRequire();
}
// Must be loaded before zone loads, so that zone can detect WTF. // Must be loaded before zone loads, so that zone can detect WTF.
import './node-env-setup'; import './node-env-setup';
import './test_fake_polyfill'; import './test_fake_polyfill';

View File

@ -13,12 +13,6 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
// bootstrap the bazel require patch since this bootstrap script is loaded with
// `--node_options=--require=$(rlocation $(location script.js))`
if (process.env['BAZEL_NODE_RUNFILES_HELPER']) {
require(process.env['BAZEL_NODE_RUNFILES_HELPER'] as string).patchRequire();
}
// Must be loaded before zone loads, so that zone can detect WTF. // Must be loaded before zone loads, so that zone can detect WTF.
import './node-env-setup'; import './node-env-setup';
import './test_fake_polyfill'; import './test_fake_polyfill';

View File

@ -6,12 +6,6 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
// bootstrap the bazel require patch since this bootstrap script is loaded with
// `--node_options=--require=$(rlocation $(location script.js))`
if (process.env['BAZEL_NODE_RUNFILES_HELPER']) {
require(process.env['BAZEL_NODE_RUNFILES_HELPER'] as string).patchRequire();
}
process.env['errorpolicy'] = (global as any)['__Zone_Error_BlacklistedStackFrames_policy'] = process.env['errorpolicy'] = (global as any)['__Zone_Error_BlacklistedStackFrames_policy'] =
'disable'; 'disable';
import './node_error_entry_point'; import './node_error_entry_point';

View File

@ -6,11 +6,5 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
// bootstrap the bazel require patch since this bootstrap script is loaded with
// `--node_options=--require=$(rlocation $(location script.js))`
if (process.env['BAZEL_NODE_RUNFILES_HELPER']) {
require(process.env['BAZEL_NODE_RUNFILES_HELPER'] as string).patchRequire();
}
process.env['errorpolicy'] = (global as any)['__Zone_Error_BlacklistedStackFrames_policy'] = 'lazy'; process.env['errorpolicy'] = (global as any)['__Zone_Error_BlacklistedStackFrames_policy'] = 'lazy';
import './node_error_entry_point'; import './node_error_entry_point';

View File

@ -268,11 +268,16 @@ def jasmine_node_test(bootstrap = [], **kwargs):
"@npm//source-map-support", "@npm//source-map-support",
"@npm//tslib", "@npm//tslib",
"@npm//xhr2", "@npm//xhr2",
"//tools/testing:bazel_patch_require.js",
] ]
configuration_env_vars = kwargs.pop("configuration_env_vars", []) + [ configuration_env_vars = kwargs.pop("configuration_env_vars", []) + [
"angular_ivy_enabled", "angular_ivy_enabled",
] ]
templated_args = kwargs.pop("templated_args", []) templated_args = [
# bazel_patch_require.js must be first
# TODO(gregmagolan): remove this once linker has been applied to nodejs_binary targets by default in rules_nodejs
"--node_options=--require=$(rlocation $(location //tools/testing:bazel_patch_require.js))",
] + kwargs.pop("templated_args", [])
for label in bootstrap: for label in bootstrap:
deps += [label] deps += [label]
templated_args += ["--node_options=--require=$(rlocation $(location %s))" % label] templated_args += ["--node_options=--require=$(rlocation $(location %s))" % label]

View File

@ -2,6 +2,8 @@ load("//tools:defaults.bzl", "ts_library")
package(default_visibility = ["//visibility:public"]) package(default_visibility = ["//visibility:public"])
exports_files(["bazel_patch_require.js"])
ts_library( ts_library(
name = "browser", name = "browser",
testonly = 1, testonly = 1,

View File

@ -0,0 +1,26 @@
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
// Load the Bazel Node runfiles helper script and patch the NodeJS module resolution. This is
// necessary to ensure that imports are properly resolved in Bazel. By default, the module
// resolution is patched in `nodejs_binary` targets when the main script loads, but since we
// --require boostrap scripts before the main script, this bootstrap script is loaded first so that
// subsequent bootstrap scripts can resolve their imports.
//
// We're in a valley with the runfiles support right now having removed the `bootstrap` attribute
// for rule_nodejs 1.0 but not applied the linker to run targets yet in rules_nodejs. In a near
// future rules_nodejs release, the runfiles helper won't be required as standard node module
// resolution works with the linker.
//
// We could have left the `bootstrap` attribute in for 1.0 and removed it for 2.0 but since we had
// an alternate approach that we're using here that isn't going to be broken in the future by the
// linker being added we decided to pull it for 1.0 so that we have fewer major breaking changes in
// 2.0.
if (process.env['BAZEL_NODE_RUNFILES_HELPER']) {
require(process.env['BAZEL_NODE_RUNFILES_HELPER']).patchRequire();
}

View File

@ -6,12 +6,6 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
// bootstrap the bazel require patch since this bootstrap script is loaded with
// `--node_options=--require=$(rlocation $(location script.js))`
if (process.env['BAZEL_NODE_RUNFILES_HELPER']) {
require(process.env['BAZEL_NODE_RUNFILES_HELPER'] as string).patchRequire();
}
import 'zone.js/lib/node/rollup-main'; import 'zone.js/lib/node/rollup-main';
import 'zone.js/lib/zone-spec/long-stack-trace'; import 'zone.js/lib/zone-spec/long-stack-trace';
import 'zone.js/lib/zone-spec/task-tracking'; import 'zone.js/lib/zone-spec/task-tracking';