angular-docs-cn/aio/tools/transforms
George Kalpakas 43ecf8a77b feat(platform-server): allow shimming the global env sooner (#40559)
`@angular/platform-server` provides the foundation for rendering an
Angular app on the server. In order to achieve that, it uses a
server-side DOM implementation (currently [domino][1]).

For rendering on the server to work as closely as possible to running
the app on the browser, we need to make DOM globals (such as `Element`,
`HTMLElement`, etc.), which are normally provided by the browser,
available as globals on the server as well.

Currently, `@angular/platform-server` achieves this by extending the
`global` object with the DOM implementation provided by `domino`. This
assignment happens in the [setDomTypes()][2] function, which is
[called in a `PLATFORM_INITIALIZER`][3]. While this works in most cases,
there are some scenarios where the DOM globals are needed sooner (i.e.
before initializing the platform). See, for example, #24551 and #39950
for more details on such issues.

This commit provides a way to solve this problem by exposing a
side-effect-ful entry-point (`@angular/platform-server/init`), that
shims the `global` object with DOM globals. People will be able to
import this entry-point in their server-rendered apps before
bootstrapping the app (for example, in their `main.server.ts` file).
(See also [#39950 (comment)][4].)

In a future update, the [`universal` schematics][5] will include such an
import by default in newly generated projects.

[1]: https://www.npmjs.com/package/domino
[2]: https://github.com/angular/angular/blob/0fc8466f1be392917e0c/packages/platform-server/src/domino_adapter.ts#L17-L21
[3]: https://github.com/angular/angular/blob/0fc8466f1be392917e0c/packages/platform-server/src/server.ts#L33
[4]: https://github.com/angular/angular/issues/39950#issuecomment-747598403
[5]: https://github.com/angular/angular-cli/blob/cc51432661eb4ab4b6a3/packages/schematics/angular/universal

PR Close #40559
2021-02-12 08:55:25 -08:00
..
angular-api-package feat(platform-server): allow shimming the global env sooner (#40559) 2021-02-12 08:55:25 -08:00
angular-base-package build(docs-infra): move docs-watch settings to a base package (#40479) 2021-01-20 16:12:15 -08:00
angular-content-package build(docs-infra): move docs-watch settings to a base package (#40479) 2021-01-20 16:12:15 -08:00
angular-errors-package docs: add embedded videos to error guides (#40453) 2021-01-20 08:47:00 -08:00
angular.io-package build(docs-infra): move docs-watch settings to a base package (#40479) 2021-01-20 16:12:15 -08:00
authors-package feat(platform-server): allow shimming the global env sooner (#40559) 2021-02-12 08:55:25 -08:00
cli-docs-package fix(docs-infra): correctly generate CLI commands docs when the overview page moves (#38365) 2020-08-06 11:41:05 -07:00
content-package build(docs-infra): implement `@reviewed` tag definition (#40582) 2021-01-28 09:04:49 -08:00
examples-package build(docs-infra): fail if there are unused example regions (#40479) 2021-01-20 16:12:15 -08:00
helpers build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
links-package build(docs-infra): move docs-watch settings to a base package (#40479) 2021-01-20 16:12:15 -08:00
remark-package refactor(docs-infra): remove `linenums=false` since it is now the default (#31674) 2019-07-24 14:38:54 -07:00
target-package
templates fix(docs-infra): correctly handle entry-points with no public exports (#40737) 2021-02-09 10:56:17 -08:00
.eslintignore
.eslintrc.js style(aio): fix docs linting issues (#19702) 2017-11-01 15:24:46 -07:00
README.md docs(docs-infra): apply the one-sentence-per-line rule to Markdown files in `aio/tools/` (#38992) 2020-09-30 09:20:00 -04:00
config.js build(aio): ignore example files that are gitignored 2017-06-09 14:33:21 +01:00
test.js test(docs-infra): run tests in random order (and make them pass) (#31527) 2019-07-18 10:17:13 -07:00

README.md

Overview

All the content that is rendered by the AIO application, and some of its configuration files, are generated from source files by Dgeni. Dgeni is a general purpose documentation generation tool.

Markdown files in /aio/content, code comments in the core Angular source files and example files are processed and transformed into files that are consumed by the AIO application.

Dgeni is configured by "packages", which contain services and processors. Some of these packages are installed as node_modules from the dgeni-packages and some are specific to the AIO project.

The project specific packages are stored in this folder (aio/tools/transforms).

If you are an author and want to know how to generate the documentation, the steps are outlined in the top level README.md.

Root packages

To run Dgeni, you must specify a root package, which acts as the entry point to the documentation generation. This root package, in turn requires a number of other packages, some are defined locally in the tools/transforms folder, such as tools/transforms/cheatsheet-package and tools/transforms/content-package, etc. And some are brought in from the dgeni-packages node modules, such as jsdoc and nunjucks.

  • The primary root package is defined in tools/transforms/angular.io-package/index.js. This package is used to run a full generation of all the documentation.
  • There are also root packages defined in tools/transforms/authors-package/*-package.js. These packages are used by the documentation authors when writing docs, since it allows them to run partial doc generation, which is not complete but is faster for quickly seeing changes to the document that you are working on.

Other packages

  • angular-base-package
  • angular-api-package
  • angular-content-package
  • content-package
  • examples-package
  • links-package
  • post-process-package
  • remark-package
  • target-package

Templates

All the templates for the angular.io dgeni transformations are stoted in the tools/transforms/templates folder. See the README.