mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-17 02:54:21 +08:00
When using the experimental esbuild-based browser application builder, the preexisting `dev-server` builder can now be used to execute the `ng serve` command with an esbuild bundled application. The `dev-server` builder provides an alternate development server that will execute the `browser-esbuild` builder to build the application and then serve the output files within a development server with live reload capabilities. This is an initial integration of the development server. It is not yet fully optimized and all features may not yet be supported. SSL, in particular, does not yet work. If already using the esbuild-based builder, no additional changes to the Angular configuration are required. The `dev-server` builder will automatically detect the application builder and use the relevent development server implementation. As the esbuild-based browser application builders is currently experimental, using the development server in this mode is also considered experimental.
407 lines
12 KiB
Python
407 lines
12 KiB
Python
# 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("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test")
|
|
load("//tools:defaults.bzl", "pkg_npm", "ts_library")
|
|
load("//tools:ts_json_schema.bzl", "ts_json_schema")
|
|
load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS")
|
|
load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package")
|
|
|
|
licenses(["notice"])
|
|
|
|
package(default_visibility = ["//visibility:public"])
|
|
|
|
ts_json_schema(
|
|
name = "app_shell_schema",
|
|
src = "src/builders/app-shell/schema.json",
|
|
)
|
|
|
|
ts_json_schema(
|
|
name = "browser_schema",
|
|
src = "src/builders/browser/schema.json",
|
|
)
|
|
|
|
ts_json_schema(
|
|
name = "browser_esbuild_schema",
|
|
src = "src/builders/browser-esbuild/schema.json",
|
|
)
|
|
|
|
ts_json_schema(
|
|
name = "dev_server_schema",
|
|
src = "src/builders/dev-server/schema.json",
|
|
)
|
|
|
|
ts_json_schema(
|
|
name = "extract_i18n_schema",
|
|
src = "src/builders/extract-i18n/schema.json",
|
|
)
|
|
|
|
ts_json_schema(
|
|
name = "karma_schema",
|
|
src = "src/builders/karma/schema.json",
|
|
)
|
|
|
|
ts_json_schema(
|
|
name = "protractor_schema",
|
|
src = "src/builders/protractor/schema.json",
|
|
)
|
|
|
|
ts_json_schema(
|
|
name = "server_schema",
|
|
src = "src/builders/server/schema.json",
|
|
)
|
|
|
|
ts_json_schema(
|
|
name = "ng_packagr_schema",
|
|
src = "src/builders/ng-packagr/schema.json",
|
|
)
|
|
|
|
ts_library(
|
|
name = "build_angular",
|
|
package_name = "@angular-devkit/build-angular",
|
|
srcs = glob(
|
|
include = [
|
|
"src/**/*.ts",
|
|
"plugins/**/*.ts",
|
|
],
|
|
exclude = [
|
|
"src/test-utils.ts",
|
|
"src/**/*_spec.ts",
|
|
"src/**/tests/**/*.ts",
|
|
"plugins/**/*_spec.ts",
|
|
"src/testing/**/*.ts",
|
|
],
|
|
) + [
|
|
"//packages/angular_devkit/build_angular:src/builders/app-shell/schema.ts",
|
|
"//packages/angular_devkit/build_angular:src/builders/browser/schema.ts",
|
|
"//packages/angular_devkit/build_angular:src/builders/browser-esbuild/schema.ts",
|
|
"//packages/angular_devkit/build_angular:src/builders/dev-server/schema.ts",
|
|
"//packages/angular_devkit/build_angular:src/builders/extract-i18n/schema.ts",
|
|
"//packages/angular_devkit/build_angular:src/builders/karma/schema.ts",
|
|
"//packages/angular_devkit/build_angular:src/builders/protractor/schema.ts",
|
|
"//packages/angular_devkit/build_angular:src/builders/server/schema.ts",
|
|
"//packages/angular_devkit/build_angular:src/builders/ng-packagr/schema.ts",
|
|
],
|
|
data = glob(
|
|
include = [
|
|
"package.json",
|
|
"builders.json",
|
|
"src/**/schema.json",
|
|
"src/**/*.js",
|
|
"src/**/*.html",
|
|
],
|
|
),
|
|
module_name = "@angular-devkit/build-angular",
|
|
module_root = "src/index.d.ts",
|
|
deps = [
|
|
"//packages/angular_devkit/architect",
|
|
"//packages/angular_devkit/build_webpack",
|
|
"//packages/angular_devkit/core",
|
|
"//packages/angular_devkit/core/node",
|
|
"//packages/ngtools/webpack",
|
|
"@npm//@ampproject/remapping",
|
|
"@npm//@angular/common",
|
|
"@npm//@angular/compiler-cli",
|
|
"@npm//@angular/core",
|
|
"@npm//@angular/localize",
|
|
"@npm//@angular/platform-server",
|
|
"@npm//@angular/service-worker",
|
|
"@npm//@babel/core",
|
|
"@npm//@babel/generator",
|
|
"@npm//@babel/helper-annotate-as-pure",
|
|
"@npm//@babel/helper-split-export-declaration",
|
|
"@npm//@babel/plugin-proposal-async-generator-functions",
|
|
"@npm//@babel/plugin-transform-async-to-generator",
|
|
"@npm//@babel/plugin-transform-runtime",
|
|
"@npm//@babel/preset-env",
|
|
"@npm//@babel/runtime",
|
|
"@npm//@babel/template",
|
|
"@npm//@discoveryjs/json-ext",
|
|
"@npm//@types/babel__core",
|
|
"@npm//@types/babel__template",
|
|
"@npm//@types/browserslist",
|
|
"@npm//@types/cacache",
|
|
"@npm//@types/glob",
|
|
"@npm//@types/inquirer",
|
|
"@npm//@types/karma",
|
|
"@npm//@types/less",
|
|
"@npm//@types/loader-utils",
|
|
"@npm//@types/node",
|
|
"@npm//@types/semver",
|
|
"@npm//@types/text-table",
|
|
"@npm//ajv",
|
|
"@npm//ansi-colors",
|
|
"@npm//autoprefixer",
|
|
"@npm//babel-loader",
|
|
"@npm//babel-plugin-istanbul",
|
|
"@npm//browserslist",
|
|
"@npm//cacache",
|
|
"@npm//chokidar",
|
|
"@npm//copy-webpack-plugin",
|
|
"@npm//critters",
|
|
"@npm//css-loader",
|
|
"@npm//esbuild",
|
|
"@npm//esbuild-wasm",
|
|
"@npm//glob",
|
|
"@npm//https-proxy-agent",
|
|
"@npm//inquirer",
|
|
"@npm//jsonc-parser",
|
|
"@npm//karma",
|
|
"@npm//karma-source-map-support",
|
|
"@npm//less",
|
|
"@npm//less-loader",
|
|
"@npm//license-webpack-plugin",
|
|
"@npm//loader-utils",
|
|
"@npm//magic-string",
|
|
"@npm//mini-css-extract-plugin",
|
|
"@npm//ng-packagr",
|
|
"@npm//open",
|
|
"@npm//ora",
|
|
"@npm//parse5-html-rewriting-stream",
|
|
"@npm//piscina",
|
|
"@npm//postcss",
|
|
"@npm//postcss-loader",
|
|
"@npm//resolve-url-loader",
|
|
"@npm//rxjs",
|
|
"@npm//sass",
|
|
"@npm//sass-loader",
|
|
"@npm//semver",
|
|
"@npm//source-map-loader",
|
|
"@npm//source-map-support",
|
|
"@npm//terser",
|
|
"@npm//text-table",
|
|
"@npm//tree-kill",
|
|
"@npm//tslib",
|
|
"@npm//typescript",
|
|
"@npm//vite",
|
|
"@npm//webpack",
|
|
"@npm//webpack-dev-middleware",
|
|
"@npm//webpack-dev-server",
|
|
"@npm//webpack-merge",
|
|
"@npm//webpack-subresource-integrity",
|
|
],
|
|
)
|
|
|
|
ts_library(
|
|
name = "build_angular_test_lib",
|
|
testonly = True,
|
|
srcs = glob(
|
|
include = [
|
|
"src/**/*_spec.ts",
|
|
],
|
|
exclude = [
|
|
"src/builders/**/*_spec.ts",
|
|
],
|
|
),
|
|
data = glob(["test/**/*"]),
|
|
deps = [
|
|
":build_angular",
|
|
":build_angular_test_utils",
|
|
"//packages/angular_devkit/architect/testing",
|
|
"//packages/angular_devkit/core",
|
|
"@npm//prettier",
|
|
"@npm//typescript",
|
|
"@npm//webpack",
|
|
],
|
|
)
|
|
|
|
[
|
|
jasmine_node_test(
|
|
name = "build_angular_test_" + toolchain_name,
|
|
srcs = [":build_angular_test_lib"],
|
|
tags = [toolchain_name],
|
|
toolchain = toolchain,
|
|
)
|
|
for toolchain_name, toolchain in zip(
|
|
TOOLCHAINS_NAMES,
|
|
TOOLCHAINS_VERSIONS,
|
|
)
|
|
]
|
|
|
|
genrule(
|
|
name = "license",
|
|
srcs = ["//:LICENSE"],
|
|
outs = ["LICENSE"],
|
|
cmd = "cp $(execpath //:LICENSE) $@",
|
|
)
|
|
|
|
pkg_npm(
|
|
name = "npm_package",
|
|
pkg_deps = [
|
|
"//packages/angular_devkit/architect:package.json",
|
|
"//packages/angular_devkit/build_webpack:package.json",
|
|
"//packages/angular_devkit/core:package.json",
|
|
"//packages/ngtools/webpack:package.json",
|
|
],
|
|
tags = ["release-package"],
|
|
deps = [
|
|
":README.md",
|
|
":build_angular",
|
|
":license",
|
|
],
|
|
)
|
|
|
|
api_golden_test_npm_package(
|
|
name = "build_angular_api",
|
|
data = [
|
|
":npm_package",
|
|
"//goldens:public-api",
|
|
],
|
|
golden_dir = "angular_cli/goldens/public-api/angular_devkit/build_angular",
|
|
npm_package = "angular_cli/packages/angular_devkit/build_angular/npm_package",
|
|
)
|
|
|
|
# Large build_angular specs
|
|
|
|
ts_library(
|
|
name = "build_angular_test_utils",
|
|
testonly = True,
|
|
srcs = glob(
|
|
include = [
|
|
"src/test-utils.ts",
|
|
"src/testing/**/*.ts",
|
|
"src/**/tests/*.ts",
|
|
],
|
|
exclude = [
|
|
"src/testing/**/*_spec.ts",
|
|
],
|
|
),
|
|
data = glob(["test/**/*"]),
|
|
tsconfig = "//:tsconfig-test.json",
|
|
deps = [
|
|
":build_angular",
|
|
"//packages/angular_devkit/architect",
|
|
"//packages/angular_devkit/architect/node",
|
|
"//packages/angular_devkit/architect/testing",
|
|
"//packages/angular_devkit/core",
|
|
"//packages/angular_devkit/core/node",
|
|
"@npm//@types/node-fetch",
|
|
"@npm//rxjs",
|
|
],
|
|
)
|
|
|
|
LARGE_SPECS = {
|
|
"app-shell": {
|
|
},
|
|
"dev-server": {
|
|
"shards": 10,
|
|
"size": "large",
|
|
"extra_deps": [
|
|
"@npm//@types/node-fetch",
|
|
"@npm//node-fetch",
|
|
"@npm//@types/http-proxy",
|
|
"@npm//http-proxy",
|
|
"@npm//puppeteer",
|
|
],
|
|
},
|
|
"extract-i18n": {},
|
|
"karma": {
|
|
"shards": 3,
|
|
"size": "large",
|
|
"extra_deps": [
|
|
"@npm//karma",
|
|
"@npm//karma-chrome-launcher",
|
|
"@npm//karma-coverage",
|
|
"@npm//karma-jasmine",
|
|
"@npm//karma-jasmine-html-reporter",
|
|
"@npm//puppeteer",
|
|
],
|
|
},
|
|
"protractor": {
|
|
"extra_deps": [
|
|
"@npm//jasmine-spec-reporter",
|
|
"@npm//protractor",
|
|
"@npm//puppeteer",
|
|
"@npm//ts-node",
|
|
],
|
|
# NB: does not run on rbe because webdriver manager uses an absolute path to chromedriver
|
|
"tags": ["no-remote-exec"],
|
|
# NB: multiple shards will compete for port 4200 so limiting to 1
|
|
"shards": 1,
|
|
},
|
|
"server": {
|
|
"extra_deps": [
|
|
"@npm//@angular/animations",
|
|
],
|
|
},
|
|
"ng-packagr": {},
|
|
"browser": {
|
|
"shards": 50,
|
|
"size": "large",
|
|
"flaky": True,
|
|
"extra_deps": [
|
|
"@npm//@angular/animations",
|
|
"@npm//@angular/material",
|
|
"@npm//bootstrap",
|
|
"@npm//jquery",
|
|
"@npm//popper.js",
|
|
],
|
|
},
|
|
"browser-esbuild": {
|
|
"extra_deps": [
|
|
"@npm//buffer",
|
|
],
|
|
},
|
|
}
|
|
|
|
[
|
|
ts_library(
|
|
name = "build_angular_" + spec + "_test_lib",
|
|
testonly = True,
|
|
srcs = glob(["src/builders/" + spec + "/**/*_spec.ts"]),
|
|
tsconfig = "//:tsconfig-test.json",
|
|
deps = [
|
|
# Dependencies needed to compile and run the specs themselves.
|
|
":build_angular",
|
|
":build_angular_test_utils",
|
|
"//packages/angular_devkit/architect",
|
|
"//packages/angular_devkit/architect/node",
|
|
"//packages/angular_devkit/architect/testing",
|
|
"//packages/angular_devkit/core",
|
|
"//packages/angular_devkit/core/node",
|
|
|
|
# Base dependencies for the application in hello-world-app.
|
|
# Some tests also require extra dependencies.
|
|
"@npm//@angular/common",
|
|
"@npm//@angular/compiler",
|
|
"@npm//@angular/compiler-cli",
|
|
"@npm//@angular/core",
|
|
"@npm//@angular/platform-browser",
|
|
"@npm//@angular/platform-browser-dynamic",
|
|
"@npm//@angular/router",
|
|
"@npm//rxjs",
|
|
"@npm//tslib",
|
|
"@npm//typescript",
|
|
"@npm//zone.js",
|
|
] + LARGE_SPECS[spec].get("extra_deps", []),
|
|
)
|
|
for spec in LARGE_SPECS
|
|
]
|
|
|
|
[
|
|
[
|
|
jasmine_node_test(
|
|
name = "build_angular_" + spec + "_test_" + toolchain_name,
|
|
size = LARGE_SPECS[spec].get("size", "medium"),
|
|
flaky = LARGE_SPECS[spec].get("flaky", False),
|
|
shard_count = LARGE_SPECS[spec].get("shards", 2),
|
|
# These tests are resource intensive and should not be over-parallized as they will
|
|
# compete for the resources of other parallel tests slowing everything down.
|
|
# Ask Bazel to allocate multiple CPUs for these tests with "cpu:n" tag.
|
|
tags = [
|
|
"cpu:2",
|
|
toolchain_name,
|
|
] + LARGE_SPECS[spec].get("tags", []),
|
|
toolchain = toolchain,
|
|
deps = [":build_angular_" + spec + "_test_lib"],
|
|
)
|
|
for spec in LARGE_SPECS
|
|
]
|
|
for toolchain_name, toolchain in zip(
|
|
TOOLCHAINS_NAMES,
|
|
TOOLCHAINS_VERSIONS,
|
|
)
|
|
]
|