build: rules_nodejs 0.26.0 & use @npm instead of @ngdeps now that downstream angular build uses angular bundles (#29063)

* removed /tools/http_server and uses http_server from rules_nodejs
* updated bazel schematics to use angular bundles

PR Close #29063
This commit is contained in:
Greg Magolan
2019-02-20 09:54:42 -08:00
committed by Kara Erickson
parent 2edb87e7f8
commit ea495d958f
222 changed files with 1238 additions and 1300 deletions

View File

@ -1,6 +1,6 @@
package(default_visibility = ["//visibility:public"])
load("@npm_bazel_typescript//:defs.bzl", "ts_config")
load("@npm_bazel_typescript//:index.bzl", "ts_config")
exports_files(["tsconfig.json"])

View File

@ -1,15 +1,14 @@
"""Re-export of some bazel rules with repository-wide defaults."""
load("@npm_bazel_karma//:defs.bzl", _ts_web_test_suite = "ts_web_test_suite")
load("@build_bazel_rules_nodejs//:defs.bzl", _jasmine_node_test = "jasmine_node_test", _nodejs_binary = "nodejs_binary", _npm_package = "npm_package")
load("@npm_bazel_typescript//:defs.bzl", _ts_library = "ts_library")
load("@npm_bazel_karma//:index.bzl", _ts_web_test_suite = "ts_web_test_suite")
load("@npm_bazel_jasmine//:index.bzl", _jasmine_node_test = "jasmine_node_test")
load("@build_bazel_rules_nodejs//:defs.bzl", _nodejs_binary = "nodejs_binary", _npm_package = "npm_package")
load("@npm_bazel_typescript//:index.bzl", _ts_library = "ts_library")
load("//packages/bazel:index.bzl", _ng_module = "ng_module", _ng_package = "ng_package")
load("//packages/bazel/src:ng_rollup_bundle.bzl", _ng_rollup_bundle = "ng_rollup_bundle")
_DEFAULT_TSCONFIG_BUILD = "//packages:tsconfig-build.json"
_DEFAULT_TSCONFIG_TEST = "//packages:tsconfig-test"
_DEFAULT_TS_TYPINGS = "@ngdeps//typescript:typescript__typings"
_DEFAULT_KARMA_BIN = "@ngdeps//@bazel/karma/bin:karma"
_INTERNAL_NG_MODULE_COMPILER = "//packages/bazel/src/ngc-wrapped"
_INTERNAL_NG_MODULE_XI18N = "//packages/bazel/src/ngc-wrapped:xi18n"
_INTERNAL_NG_PACKAGER_PACKAGER = "//packages/bazel/src/ng_package:packager"
@ -78,11 +77,11 @@ def _default_module_name(testonly):
def ts_library(tsconfig = None, testonly = False, deps = [], module_name = None, **kwargs):
"""Default values for ts_library"""
deps = deps + ["@ngdeps//tslib"]
deps = deps + ["@npm//tslib"]
if testonly:
# Match the types[] in //packages:tsconfig-test.json
deps.append("@ngdeps//@types/jasmine")
deps.append("@ngdeps//@types/node")
deps.append("@npm//@types/jasmine")
deps.append("@npm//@types/node")
if not tsconfig:
if testonly:
tsconfig = _DEFAULT_TSCONFIG_TEST
@ -96,18 +95,17 @@ def ts_library(tsconfig = None, testonly = False, deps = [], module_name = None,
tsconfig = tsconfig,
testonly = testonly,
deps = deps,
node_modules = _DEFAULT_TS_TYPINGS,
module_name = module_name,
**kwargs
)
def ng_module(name, tsconfig = None, entry_point = None, testonly = False, deps = [], module_name = None, **kwargs):
"""Default values for ng_module"""
deps = deps + ["@ngdeps//tslib"]
deps = deps + ["@npm//tslib"]
if testonly:
# Match the types[] in //packages:tsconfig-test.json
deps.append("@ngdeps//@types/jasmine")
deps.append("@ngdeps//@types/node")
deps.append("@npm//@types/jasmine")
deps.append("@npm//@types/node")
if not tsconfig:
if testonly:
tsconfig = _DEFAULT_TSCONFIG_TEST
@ -126,7 +124,6 @@ def ng_module(name, tsconfig = None, entry_point = None, testonly = False, deps
deps = deps,
compiler = _INTERNAL_NG_MODULE_COMPILER,
ng_xi18n = _INTERNAL_NG_MODULE_XI18N,
node_modules = _DEFAULT_TS_TYPINGS,
module_name = module_name,
**kwargs
)
@ -138,7 +135,7 @@ def ng_package(name, readme_md = None, license_banner = None, deps = [], **kwarg
if not license_banner:
license_banner = "//packages:license-banner.txt"
deps = deps + [
"@ngdeps//tslib",
"@npm//tslib",
]
_ng_package(
@ -164,7 +161,7 @@ def ts_web_test_suite(bootstrap = [], deps = [], **kwargs):
if not bootstrap:
bootstrap = ["//:web_test_bootstrap_scripts"]
local_deps = [
"@ngdeps//node_modules/tslib:tslib.js",
"@npm//node_modules/tslib:tslib.js",
"//tools/rxjs:rxjs_umd_modules",
"//tools/testing:browser",
] + deps
@ -172,7 +169,6 @@ def ts_web_test_suite(bootstrap = [], deps = [], **kwargs):
_ts_web_test_suite(
bootstrap = bootstrap,
deps = local_deps,
karma = _DEFAULT_KARMA_BIN,
# Run unit tests on local Chromium by default.
# You can exclude tests based on tags, e.g. to skip Firefox testing,
# `yarn bazel test --test_tag_filters=-browser:firefox-local [targets]`
@ -192,7 +188,7 @@ def nodejs_binary(data = [], **kwargs):
_nodejs_binary(
# Pass-thru --define=compile=foo as an environment variable
configuration_env_vars = ["compile"],
data = data + ["@ngdeps//source-map-support"],
data = data + ["@npm//source-map-support"],
**kwargs
)
@ -200,28 +196,28 @@ def jasmine_node_test(deps = [], **kwargs):
"""Default values for jasmine_node_test"""
deps = deps + [
# Very common dependencies for tests
"@ngdeps//chokidar",
"@ngdeps//domino",
"@ngdeps//jasmine",
"@ngdeps//jasmine-core",
"@ngdeps//mock-fs",
"@ngdeps//reflect-metadata",
"@ngdeps//source-map-support",
"@ngdeps//tslib",
"@ngdeps//xhr2",
"@npm//chokidar",
"@npm//domino",
"@npm//jasmine-core",
"@npm//mock-fs",
"@npm//reflect-metadata",
"@npm//source-map-support",
"@npm//tslib",
"@npm//xhr2",
]
_jasmine_node_test(
deps = deps,
# Pass-thru --define=compile=foo as an environment variable
configuration_env_vars = ["compile"],
jasmine = "@npm//jasmine",
**kwargs
)
def ng_rollup_bundle(deps = [], **kwargs):
"""Default values for ng_rollup_bundle"""
deps = deps + [
"@ngdeps//tslib",
"@ngdeps//reflect-metadata",
"@npm//tslib",
"@npm//reflect-metadata",
]
_ng_rollup_bundle(
deps = deps,

View File

@ -1 +0,0 @@
# Marker this directory is a Bazel package.

View File

@ -1,11 +0,0 @@
# http-server
This is a simple Bazel wrapper around the http-server npm package.
A typical frontend project is served by a specific server.
For Angular's example applications, our needs are simple so we can just use http-server.
Real projects might need history-server (for router support) or even better a full-featured production server like express.
We modify http-server to support serving Brotli-compressed files, which end with a `.br` extension.
This is equivalent to gzip-compression support.
See https://github.com/alexeagle/http-server/commits/master which points to a modified ecstatic library.

View File

@ -1,20 +0,0 @@
"""Simple Bazel wrapper around npm http-server package.
See https://www.npmjs.com/package/http-server
"""
load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary")
def http_server(templated_args = [], **kwargs):
# By default, we pass an argument pointing the http server to the
# package of the caller.
# This assumes there is an index.html in the package directory.
if not templated_args:
templated_args = [native.package_name()]
nodejs_binary(
node_modules = "@http-server_runtime_deps//:node_modules",
entry_point = "http-server/bin/http-server",
templated_args = templated_args,
**kwargs
)

View File

@ -1,9 +0,0 @@
{
"name": "http_server",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"devDependencies": {
"http-server": "github:alexeagle/http-server#97205e945b69091606ed83aa0c8489e9ce65d282"
}
}

View File

@ -1,125 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
async@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
colors@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
corser@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87"
debug@^2.2.0:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
ms "2.0.0"
"ecstatic@github:alexeagle/node-ecstatic#833f734497f72f8cf396f162f46ad48c56ddc4ca":
version "3.2.0"
resolved "https://codeload.github.com/alexeagle/node-ecstatic/tar.gz/833f734497f72f8cf396f162f46ad48c56ddc4ca"
dependencies:
he "^1.1.1"
mime "^1.4.1"
minimist "^1.1.0"
url-join "^2.0.2"
eventemitter3@1.x.x:
version "1.2.0"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
he@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
http-proxy@^1.8.1:
version "1.16.2"
resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
dependencies:
eventemitter3 "1.x.x"
requires-port "1.x.x"
"http-server@github:alexeagle/http-server#97205e945b69091606ed83aa0c8489e9ce65d282":
version "0.11.1"
resolved "https://codeload.github.com/alexeagle/http-server/tar.gz/97205e945b69091606ed83aa0c8489e9ce65d282"
dependencies:
colors "1.0.3"
corser "~2.0.0"
ecstatic "github:alexeagle/node-ecstatic#833f734497f72f8cf396f162f46ad48c56ddc4ca"
http-proxy "^1.8.1"
opener "~1.4.0"
optimist "0.6.x"
portfinder "^1.0.13"
union "~0.4.3"
mime@^1.4.1:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
minimist@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
minimist@~0.0.1:
version "0.0.10"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
mkdirp@0.5.x:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
minimist "0.0.8"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
opener@~1.4.0:
version "1.4.3"
resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8"
optimist@0.6.x:
version "0.6.1"
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
dependencies:
minimist "~0.0.1"
wordwrap "~0.0.2"
portfinder@^1.0.13:
version "1.0.13"
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"
dependencies:
async "^1.5.2"
debug "^2.2.0"
mkdirp "0.5.x"
qs@~2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404"
requires-port@1.x.x:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
union@~0.4.3:
version "0.4.6"
resolved "https://registry.yarnpkg.com/union/-/union-0.4.6.tgz#198fbdaeba254e788b0efcb630bc11f24a2959e0"
dependencies:
qs "~2.3.3"
url-join@^2.0.2:
version "2.0.5"
resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728"
wordwrap@~0.0.2:
version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"

View File

@ -1,46 +0,0 @@
# 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
"Install angular source dependencies"
load("@build_bazel_rules_nodejs//:package.bzl", "check_rules_nodejs_version")
load("@build_bazel_rules_nodejs//:defs.bzl", "yarn_install")
load("@angular//packages/bazel/src:ng_setup_workspace.bzl", _ng_setup_workspace = "ng_setup_workspace")
def ng_setup_workspace():
"""This repository rule should be called from your WORKSPACE file.
It creates some additional Bazel external repositories that are used internally
to build angular
"""
# The NodeJS rules version must be at least v0.15.3 because:
# - 0.15.2 Re-introduced the prod_only attribute on yarn_install
# - 0.15.3 Includes a fix for the `jasmine_node_test` rule ignoring target tags
# - 0.16.8 Supports npm installed bazel workspaces
check_rules_nodejs_version("0.16.8")
yarn_install(
name = "ngdeps",
package_json = "@angular//:package.json",
yarn_lock = "@angular//:yarn.lock",
data = ["@angular//:tools/yarn/check-yarn.js", "@angular//:tools/postinstall-patches.js"],
# Don't install devDependencies, they are large and not used under Bazel
prod_only = True,
)
yarn_install(
name = "ts-api-guardian_deps",
package_json = "@angular//tools/ts-api-guardian:package.json",
yarn_lock = "@angular//tools/ts-api-guardian:yarn.lock",
)
yarn_install(
name = "http-server_runtime_deps",
package_json = "@angular//tools/http-server:package.json",
yarn_lock = "@angular//tools/http-server:yarn.lock",
)
_ng_setup_workspace()

View File

@ -0,0 +1,14 @@
/**
* @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
*/
/**
* @fileoverview This files is only here so that @npm//@angular/bazel/bin:ngc-wrapped
* is a valid target as it is part of `esm5_outputs_aspect` in /packages/bazel/src/esm5.bzl
* TODO(gregmagolan): fix esm5_outputs_aspect so that this is not required
*/
throw new Error('should never be run');

View File

@ -0,0 +1,6 @@
{
"version": "0.0.0",
"bin": {
"ngc-wrapped": "./index.js"
}
}

View File

@ -1,8 +0,0 @@
package(default_visibility = ["//visibility:public"])
# Empty filegroup here so that @npm//@angular/bazel is a valid Bazel target
# for the @angular//:@angular/bazel/ngc-wrapped target
filegroup(
name = "bazel",
srcs = [],
)

View File

@ -1,8 +0,0 @@
package(default_visibility = ["//visibility:public"])
# Alias here so that @npm//@bazel/typescript is a valid Bazel target
# which is reference in npm_bazel_typescript/BUILD.bazel
alias(
name = "typescript",
actual = "@ngdeps//@bazel/typescript",
)

View File

@ -1,7 +0,0 @@
package(default_visibility = ["//visibility:public"])
# Alias here so that references actual in @ngdeps
alias(
name = "tsc_wrapped",
actual = "@ngdeps//@bazel/typescript/bin:tsc_wrapped",
)

View File

@ -1 +0,0 @@
# Marker file that this directory is a bazel package

View File

@ -1 +0,0 @@
workspace(name = "npm")

View File

@ -4,6 +4,6 @@ filegroup(
name = "rxjs_umd_modules",
srcs = [
":rxjs_shims.js",
"@ngdeps//node_modules/rxjs:bundles/rxjs.umd.js",
"@npm//node_modules/rxjs:bundles/rxjs.umd.js",
],
)

View File

@ -14,7 +14,7 @@ ts_library(
),
deps = [
"//packages:types",
"@ngdeps//typescript",
"@npm//typescript",
],
)
@ -28,7 +28,7 @@ ts_library(
deps = [
":lib",
"//packages:types",
"@ngdeps//typescript",
"@npm//typescript",
],
)

View File

@ -18,7 +18,7 @@ def js_expected_symbol_test(name, src, golden, data = [], **kwargs):
golden,
Label("//tools/symbol-extractor:lib"),
Label("@bazel_tools//tools/bash/runfiles"),
Label("@ngdeps//typescript"),
Label("@npm//typescript"),
]
entry_point = "angular/tools/symbol-extractor/cli.js"

View File

@ -23,7 +23,7 @@ ts_library(
"//packages/core/testing",
"//packages/platform-server",
"//packages/platform-server/testing",
"@ngdeps//domino",
"@npm//domino",
],
)

View File

@ -3,7 +3,7 @@ load(
"jasmine_node_test",
"npm_package",
)
load("@npm_bazel_typescript//:defs.bzl", "ts_library")
load("@npm_bazel_typescript//:index.bzl", "ts_library")
exports_files(["bin/ts-api-guardian"])