angular-cn/aio/content/guide/migration-update-libraries-...

2.0 KiB

tslib Direct Dependency Migration

What does this migration do?

If you have any libraries within your workspace, this migration will convert tslib peer dependencies to direct dependencies for the libraries. TypeScript uses the tslib package to provide common helper functions used in compiled TypeScript code. The tslib version is also updated to 2.0.0 to support TypeScript 3.9.

Before:

{
  "name": "my-lib",
  "version": "0.0.1",
  "peerDependencies": {
    "@angular/common": "^9.0.0",
    "@angular/core": "^9.0.0",
    "tslib": "^1.12.0"
  }
}

After:

{
  "name": "my-lib",
  "version": "0.0.1",
  "peerDependencies": {
    "@angular/common": "^9.0.0",
    "@angular/core": "^9.0.0"
  },
  "dependencies": {
    "tslib": "^2.0.0"
  }
}

Why is this migration necessary?

The tslib is a runtime library for Typescript. The version of this library is bound to the version of the TypeScript compiler used to compile a library. Peer dependencies do not accurately represent this relationship between the runtime and the compiler. If tslib remained declared as a library peer dependency, it would be possible for some Angular workspaces to get into a state where the workspace could not satisfy tslib peer dependency requirements for multiple libraries, resulting in build-time or run-time errors.

As of TypeScript 3.9 (used by Angular v10), tslib version of 2.x is required to build new applications. However, older libraries built with previous version of TypeScript and already published to npm might need tslib 1.x. This migration makes it possible for code depending on incompatible versions of the tslib runtime library to remain interoperable.

Do I still need tslib as a dependency in my workspace package.json?

Yes. The tslib dependency declared in the package.json file of the workspace is used to build applications within this workspace, as well as run unit tests for workspace libraries, and is required.