Go to file
Alex Rickabaugh 7d954dffd0 feat(ivy): detect cycles and use remote scoping of components if needed (#28169)
By its nature, Ivy alters the import graph of a TS program, adding imports
where template dependencies exist. For example, if ComponentA uses PipeB
in its template, Ivy will insert an import of PipeB into the file in which
ComponentA is declared.

Any insertion of an import into a program has the potential to introduce a
cycle into the import graph. If for some reason the file in which PipeB is
declared imports the file in which ComponentA is declared (maybe it makes
use of a service or utility function that happens to be in the same file as
ComponentA) then this could create an import cycle. This turns out to
happen quite regularly in larger Angular codebases.

TypeScript and the Ivy runtime have no issues with such cycles. However,
other tools are not so accepting. In particular the Closure Compiler is
very anti-cycle.

To mitigate this problem, it's necessary to detect when the insertion of
an import would create a cycle. ngtsc can then use a different strategy,
known as "remote scoping", instead of directly writing a reference from
one component to another. Under remote scoping, a function
'setComponentScope' is called after the declaration of the component's
module, which does not require the addition of new imports.

FW-647 #resolve

PR Close #28169
2019-01-28 12:10:25 -08:00
.buildkite revert: "ci: use image based cache for windows BuildKite (#27990)" (#28160) 2019-01-18 10:21:38 -08:00
.circleci docs: document why not using `compare-url` orb (#28010) 2019-01-10 10:50:30 -08:00
.github ci: add brandonroberts to @angular/docs-infra codeowners (#28023) 2019-01-09 11:50:40 -08:00
.vscode build: update vscode settings to support clang-format (#28348) 2019-01-25 12:48:09 -08:00
aio fix(docs-infra): upgrade codelyzer to 4.5.0 (#28389) 2019-01-28 11:51:56 -08:00
docs docs: update the triage and labels doc with the latest processes (#28127) 2019-01-15 09:48:18 -08:00
integration fix(bazel): ng-new should run yarn install (#28381) 2019-01-28 11:54:37 -08:00
modules refactor: remove obsolete font-smoothing property (#28174) 2019-01-23 15:44:35 -08:00
packages feat(ivy): detect cycles and use remote scoping of components if needed (#28169) 2019-01-28 12:10:25 -08:00
scripts ci: add a rebase check to the merge-pr script (#28250) 2019-01-22 09:26:53 -08:00
third_party/github.com/bazelbuild/bazel-toolchains/bazelrc build: update to Bazel 0.21.0 (#27935) 2019-01-04 18:38:44 -08:00
tools fix(ivy): NgOnChangesFeature no longer included in hello_world (#28187) 2019-01-23 10:59:34 -08:00
.bazelignore build: add aio/tools/examples/shared/node_modules to .bazelignore (#27278) 2018-11-27 10:30:58 -08:00
.bazelrc build(bazel): update to bazel 0.22.0 and turn on --incompatible_strict_action_env flag (#28404) 2019-01-28 11:48:41 -08:00
.clang-format feat(tooling): Add a .clang-format for automated JavaScript formatting. 2015-04-02 08:44:34 -07:00
.editorconfig build: use https link to editorconfig.org in .editorconfig (#27664) 2018-12-18 09:30:09 -08:00
.gitattributes chore: force lf EOL for ts files (#11143) 2016-08-29 12:41:58 -07:00
.gitignore build: update and unify gitignore (#28316) 2019-01-23 10:55:21 -08:00
.mailmap build: add a Git .mailmap with my new name (#19550) 2017-10-09 14:35:30 -07:00
.nvmrc build: update .nvmrc file to correct node version (#25992) 2018-09-18 13:11:58 -07:00
BUILD.bazel build: load angular.js minified output in upgrade tests (#27711) 2018-12-18 09:29:27 -08:00
CHANGELOG.md release: cut the v8.0.0-beta.1 release 2019-01-22 15:58:57 -08:00
CODE_OF_CONDUCT.md docs: fix community tab in GitHub by copying CoC 2018-02-27 19:02:30 -08:00
CONTRIBUTING.md build: remove travisci leftovers (#27979) 2019-01-09 10:41:16 -08:00
LICENSE build: bump year (#27880) 2019-01-11 11:15:59 -08:00
README.md docs: remove Travis status from README (#27973) 2019-01-08 10:38:34 -08:00
WORKSPACE build(bazel): update to bazel 0.22.0 and turn on --incompatible_strict_action_env flag (#28404) 2019-01-28 11:48:41 -08:00
browser-providers.conf.js build: remove travisci leftovers (#27979) 2019-01-09 10:41:16 -08:00
gulpfile.js build: remove obsolete gulp build task (#27386) 2018-12-05 20:55:32 -08:00
index.bzl style: format .bzl files with buildifier (#23544) 2018-08-08 13:12:07 -07:00
karma-js.conf.js ci: move local and saucelabs unit tests to circle (#27937) 2019-01-07 15:35:09 -08:00
package.json fix(bazel): Bazel-workspace schematics should run in ScopedTree (#28349) 2019-01-28 12:00:16 -08:00
protractor-e2e.conf.js build: re-enable disabled e2e tests (#27979) 2019-01-09 10:41:16 -08:00
protractor-examples-e2e.conf.js build: remove travisci leftovers (#27979) 2019-01-09 10:41:16 -08:00
protractor-perf.conf.js build: remove travisci leftovers (#27979) 2019-01-09 10:41:16 -08:00
shims_for_IE.js Revert "refactor: add license header to JS files & format files (#12035)" 2016-10-04 14:06:41 -07:00
test-events.js fix(platform-browser): run BLACK_LISTED_EVENTS outside of ngZone (#18993) 2017-09-05 15:33:22 -05:00
test-main.js refactor(core): remove withBody from public testing API (#25171) 2018-07-31 15:09:32 -07:00
tslint.json style: tslint enforces no debugger statements left behind (#25532) 2018-08-16 16:00:22 -07:00
yarn.lock fix(bazel): Bazel-workspace schematics should run in ScopedTree (#28349) 2019-01-28 12:00:16 -08:00
yarn.lock.readme.md build: remove travisci leftovers (#27979) 2019-01-09 10:41:16 -08:00

README.md

CircleCI BrowserStack Status Join the chat at https://gitter.im/angular/angular npm version

Angular

Angular is a development platform for building mobile and desktop web applications using Typescript/JavaScript and other languages.

Quickstart

Get started in 5 minutes.

Changelog

Learn about the latest improvements.

Want to help?

Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for contributing and then check out one of our issues in the hotlist: community-help.