Skip to content

Commit d9a8bbe

Browse files
committed
docs(@ngtools/webpack): add Ivy linker setup documentation to readme
When not using the Angular CLI, the Babel-based Ivy linker is also required to successfully build an application. A section describing the setup of the linker in addition to the Angular compiler plugin has now been included with links to the AIO documentation and the babel-loader for additional information. (cherry picked from commit f595936)
1 parent 9592cb4 commit d9a8bbe

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

packages/ngtools/webpack/README.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# Angular Compiler Webpack Plugin
22

33
Webpack 5.x plugin for the Angular Ahead-of-Time compiler. The plugin also supports Angular JIT mode.
4+
When this plugin is used outside of the Angular CLI, the Ivy linker will also be needed to support
5+
the usage of Angular libraries. An example configuration of the Babel-based Ivy linker is provided
6+
in the linker section. For additional information regarding the linker, please see: https://v13.angular.io/guide/creating-libraries#consuming-partial-ivy-code-outside-the-angular-cli
47

58
## Usage
69

@@ -13,6 +16,7 @@ exports = {
1316
/* ... */
1417
module: {
1518
rules: [
19+
/* ... */
1620
{
1721
test: /\.[jt]sx?$/,
1822
loader: '@ngtools/webpack',
@@ -23,6 +27,7 @@ exports = {
2327
plugins: [
2428
new AngularWebpackPlugin({
2529
tsconfig: 'path/to/tsconfig.json',
30+
// ... other options as needed
2631
}),
2732
],
2833
};
@@ -38,3 +43,38 @@ The loader works with webpack plugin to compile the application's TypeScript. It
3843
- `directTemplateLoading` [default: `true`] - Causes the plugin to load component templates (HTML) directly from the filesystem. This is more efficient if only using the `raw-loader` to load component templates. Do not enable this option if additional loaders are configured for component templates.
3944
- `fileReplacements` [default: none] - Allows replacing TypeScript files with other TypeScript files in the build. This option acts on fully resolved file paths.
4045
- `inlineStyleFileExtension` [default: none] - When set inline component styles will be processed by Webpack as files with the provided extension.
46+
47+
## Ivy Linker
48+
49+
The Ivy linker can be setup by using the Webpack `babel-loader` package.
50+
If not already installed, add the `babel-loader` package using your project's package manager.
51+
Then in your webpack config, add the `babel-loader` with the following configuration.
52+
If the `babel-loader` is already present in your configuration, the linker plugin can be added to
53+
the existing loader configuration as well.
54+
Enabling caching for the `babel-loader` is recommended to avoid reprocessing libraries on
55+
every build.
56+
For additional information regarding the `babel-loader` package, please see: https://github.com/babel/babel-loader/tree/main#readme
57+
58+
```typescript
59+
import linkerPlugin from '@angular/compiler-cli/linker/babel';
60+
61+
exports = {
62+
/* ... */
63+
module: {
64+
rules: [
65+
/* ... */
66+
{
67+
test: /\.[cm]?js$/,
68+
use: {
69+
loader: 'babel-loader',
70+
options: {
71+
cacheDirectory: true,
72+
compact: false,
73+
plugins: [linkerPlugin],
74+
},
75+
},
76+
},
77+
],
78+
},
79+
};
80+
```

0 commit comments

Comments
 (0)