docs(angular): add angular rspack documentation (#30269)
## Current Behavior Docs for Angular Rspack currently live on angular-rspack.dev ## Expected Behavior Migrate docs for Angular Rspack to nx.dev
This commit is contained in:
parent
2d69aa12bf
commit
a72ffcbe70
@ -1512,6 +1512,39 @@
|
|||||||
"id": "angular",
|
"id": "angular",
|
||||||
"isExternal": false,
|
"isExternal": false,
|
||||||
"children": [
|
"children": [
|
||||||
|
{
|
||||||
|
"name": "Angular Rspack",
|
||||||
|
"path": "/recipes/angular/rspack",
|
||||||
|
"id": "rspack",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"name": "Introduction",
|
||||||
|
"path": "/recipes/angular/rspack/introduction",
|
||||||
|
"id": "introduction",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Migrate from Angular Webpack",
|
||||||
|
"path": "/recipes/angular/rspack/migrate-from-webpack",
|
||||||
|
"id": "migrate-from-webpack",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Handling Configurations",
|
||||||
|
"path": "/recipes/angular/rspack/handling-configurations",
|
||||||
|
"id": "handling-configurations",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Migration",
|
"name": "Migration",
|
||||||
"path": "/recipes/angular/migration",
|
"path": "/recipes/angular/migration",
|
||||||
@ -2925,6 +2958,39 @@
|
|||||||
"id": "angular",
|
"id": "angular",
|
||||||
"isExternal": false,
|
"isExternal": false,
|
||||||
"children": [
|
"children": [
|
||||||
|
{
|
||||||
|
"name": "Angular Rspack",
|
||||||
|
"path": "/recipes/angular/rspack",
|
||||||
|
"id": "rspack",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"name": "Introduction",
|
||||||
|
"path": "/recipes/angular/rspack/introduction",
|
||||||
|
"id": "introduction",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Migrate from Angular Webpack",
|
||||||
|
"path": "/recipes/angular/rspack/migrate-from-webpack",
|
||||||
|
"id": "migrate-from-webpack",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Handling Configurations",
|
||||||
|
"path": "/recipes/angular/rspack/handling-configurations",
|
||||||
|
"id": "handling-configurations",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Migration",
|
"name": "Migration",
|
||||||
"path": "/recipes/angular/migration",
|
"path": "/recipes/angular/migration",
|
||||||
@ -2993,6 +3059,63 @@
|
|||||||
],
|
],
|
||||||
"disableCollapsible": false
|
"disableCollapsible": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Angular Rspack",
|
||||||
|
"path": "/recipes/angular/rspack",
|
||||||
|
"id": "rspack",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"name": "Introduction",
|
||||||
|
"path": "/recipes/angular/rspack/introduction",
|
||||||
|
"id": "introduction",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Migrate from Angular Webpack",
|
||||||
|
"path": "/recipes/angular/rspack/migrate-from-webpack",
|
||||||
|
"id": "migrate-from-webpack",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Handling Configurations",
|
||||||
|
"path": "/recipes/angular/rspack/handling-configurations",
|
||||||
|
"id": "handling-configurations",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Introduction",
|
||||||
|
"path": "/recipes/angular/rspack/introduction",
|
||||||
|
"id": "introduction",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Migrate from Angular Webpack",
|
||||||
|
"path": "/recipes/angular/rspack/migrate-from-webpack",
|
||||||
|
"id": "migrate-from-webpack",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Handling Configurations",
|
||||||
|
"path": "/recipes/angular/rspack/handling-configurations",
|
||||||
|
"id": "handling-configurations",
|
||||||
|
"isExternal": false,
|
||||||
|
"children": [],
|
||||||
|
"disableCollapsible": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Migration",
|
"name": "Migration",
|
||||||
"path": "/recipes/angular/migration",
|
"path": "/recipes/angular/migration",
|
||||||
|
|||||||
@ -2071,6 +2071,51 @@
|
|||||||
"mediaImage": "",
|
"mediaImage": "",
|
||||||
"file": "",
|
"file": "",
|
||||||
"itemList": [
|
"itemList": [
|
||||||
|
{
|
||||||
|
"id": "rspack",
|
||||||
|
"name": "Angular Rspack",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "",
|
||||||
|
"itemList": [
|
||||||
|
{
|
||||||
|
"id": "introduction",
|
||||||
|
"name": "Introduction",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/introduction",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/introduction",
|
||||||
|
"tags": ["introduction"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "migrate-from-webpack",
|
||||||
|
"name": "Migrate from Angular Webpack",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/migrate-from-webpack",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/migrate-from-webpack",
|
||||||
|
"tags": ["migrate-from-webpack"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "handling-configurations",
|
||||||
|
"name": "Handling Configurations",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/handling-configurations",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/handling-configurations",
|
||||||
|
"tags": ["handling-configurations", "configurations"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack",
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "migration",
|
"id": "migration",
|
||||||
"name": "Migration",
|
"name": "Migration",
|
||||||
@ -4008,6 +4053,51 @@
|
|||||||
"mediaImage": "",
|
"mediaImage": "",
|
||||||
"file": "",
|
"file": "",
|
||||||
"itemList": [
|
"itemList": [
|
||||||
|
{
|
||||||
|
"id": "rspack",
|
||||||
|
"name": "Angular Rspack",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "",
|
||||||
|
"itemList": [
|
||||||
|
{
|
||||||
|
"id": "introduction",
|
||||||
|
"name": "Introduction",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/introduction",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/introduction",
|
||||||
|
"tags": ["introduction"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "migrate-from-webpack",
|
||||||
|
"name": "Migrate from Angular Webpack",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/migrate-from-webpack",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/migrate-from-webpack",
|
||||||
|
"tags": ["migrate-from-webpack"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "handling-configurations",
|
||||||
|
"name": "Handling Configurations",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/handling-configurations",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/handling-configurations",
|
||||||
|
"tags": ["handling-configurations", "configurations"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack",
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "migration",
|
"id": "migration",
|
||||||
"name": "Migration",
|
"name": "Migration",
|
||||||
@ -4102,6 +4192,84 @@
|
|||||||
"path": "/recipes/angular",
|
"path": "/recipes/angular",
|
||||||
"tags": []
|
"tags": []
|
||||||
},
|
},
|
||||||
|
"/recipes/angular/rspack": {
|
||||||
|
"id": "rspack",
|
||||||
|
"name": "Angular Rspack",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "",
|
||||||
|
"itemList": [
|
||||||
|
{
|
||||||
|
"id": "introduction",
|
||||||
|
"name": "Introduction",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/introduction",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/introduction",
|
||||||
|
"tags": ["introduction"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "migrate-from-webpack",
|
||||||
|
"name": "Migrate from Angular Webpack",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/migrate-from-webpack",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/migrate-from-webpack",
|
||||||
|
"tags": ["migrate-from-webpack"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "handling-configurations",
|
||||||
|
"name": "Handling Configurations",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/handling-configurations",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/handling-configurations",
|
||||||
|
"tags": ["handling-configurations", "configurations"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack",
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"/recipes/angular/rspack/introduction": {
|
||||||
|
"id": "introduction",
|
||||||
|
"name": "Introduction",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/introduction",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/introduction",
|
||||||
|
"tags": ["introduction"]
|
||||||
|
},
|
||||||
|
"/recipes/angular/rspack/migrate-from-webpack": {
|
||||||
|
"id": "migrate-from-webpack",
|
||||||
|
"name": "Migrate from Angular Webpack",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/migrate-from-webpack",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/migrate-from-webpack",
|
||||||
|
"tags": ["migrate-from-webpack"]
|
||||||
|
},
|
||||||
|
"/recipes/angular/rspack/handling-configurations": {
|
||||||
|
"id": "handling-configurations",
|
||||||
|
"name": "Handling Configurations",
|
||||||
|
"description": "",
|
||||||
|
"mediaImage": "",
|
||||||
|
"file": "shared/guides/angular-rspack/handling-configurations",
|
||||||
|
"itemList": [],
|
||||||
|
"isExternal": false,
|
||||||
|
"path": "/recipes/angular/rspack/handling-configurations",
|
||||||
|
"tags": ["handling-configurations", "configurations"]
|
||||||
|
},
|
||||||
"/recipes/angular/migration": {
|
"/recipes/angular/migration": {
|
||||||
"id": "migration",
|
"id": "migration",
|
||||||
"name": "Migration",
|
"name": "Migration",
|
||||||
|
|||||||
@ -1071,6 +1071,42 @@
|
|||||||
"path": "/troubleshooting/performance-profiling"
|
"path": "/troubleshooting/performance-profiling"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"introduction": [
|
||||||
|
{
|
||||||
|
"description": "",
|
||||||
|
"file": "shared/guides/angular-rspack/introduction",
|
||||||
|
"id": "introduction",
|
||||||
|
"name": "Introduction",
|
||||||
|
"path": "/recipes/angular/rspack/introduction"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"migrate-from-webpack": [
|
||||||
|
{
|
||||||
|
"description": "",
|
||||||
|
"file": "shared/guides/angular-rspack/migrate-from-webpack",
|
||||||
|
"id": "migrate-from-webpack",
|
||||||
|
"name": "Migrate from Angular Webpack",
|
||||||
|
"path": "/recipes/angular/rspack/migrate-from-webpack"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"handling-configurations": [
|
||||||
|
{
|
||||||
|
"description": "",
|
||||||
|
"file": "shared/guides/angular-rspack/handling-configurations",
|
||||||
|
"id": "handling-configurations",
|
||||||
|
"name": "Handling Configurations",
|
||||||
|
"path": "/recipes/angular/rspack/handling-configurations"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"description": "",
|
||||||
|
"file": "shared/guides/angular-rspack/handling-configurations",
|
||||||
|
"id": "handling-configurations",
|
||||||
|
"name": "Handling Configurations",
|
||||||
|
"path": "/recipes/angular/rspack/handling-configurations"
|
||||||
|
}
|
||||||
|
],
|
||||||
"deployment": [
|
"deployment": [
|
||||||
{
|
{
|
||||||
"description": "",
|
"description": "",
|
||||||
|
|||||||
@ -698,6 +698,30 @@
|
|||||||
"id": "angular",
|
"id": "angular",
|
||||||
"description": "Advanced guides to adopt Nx in Angular.",
|
"description": "Advanced guides to adopt Nx in Angular.",
|
||||||
"itemList": [
|
"itemList": [
|
||||||
|
{
|
||||||
|
"name": "Angular Rspack",
|
||||||
|
"id": "rspack",
|
||||||
|
"itemList": [
|
||||||
|
{
|
||||||
|
"name": "Introduction",
|
||||||
|
"id": "introduction",
|
||||||
|
"tags": ["introduction"],
|
||||||
|
"file": "shared/guides/angular-rspack/introduction"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Migrate from Angular Webpack",
|
||||||
|
"id": "migrate-from-webpack",
|
||||||
|
"tags": ["migrate-from-webpack"],
|
||||||
|
"file": "shared/guides/angular-rspack/migrate-from-webpack"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Handling Configurations",
|
||||||
|
"id": "handling-configurations",
|
||||||
|
"tags": ["handling-configurations", "configurations"],
|
||||||
|
"file": "shared/guides/angular-rspack/handling-configurations"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Migration",
|
"name": "Migration",
|
||||||
"id": "migration",
|
"id": "migration",
|
||||||
@ -2431,6 +2455,44 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "angular-rspack",
|
||||||
|
"id": "angular-rspack",
|
||||||
|
"description": "angular-rspack package.",
|
||||||
|
"itemList": [
|
||||||
|
{
|
||||||
|
"name": "createConfig",
|
||||||
|
"id": "create-config",
|
||||||
|
"path": "/nx-api/angular-rspack/documents/create-config",
|
||||||
|
"file": "shared/guides/angular-rspack/api/nx-angular-rspack/create-config"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "createServer",
|
||||||
|
"id": "create-server",
|
||||||
|
"path": "/nx-api/angular-rspack/documents/create-server",
|
||||||
|
"file": "shared/guides/angular-rspack/api/nx-angular-rspack/create-server"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "angular-rsbuild",
|
||||||
|
"id": "angular-rsbuild",
|
||||||
|
"description": "angular-rsbuild package.",
|
||||||
|
"itemList": [
|
||||||
|
{
|
||||||
|
"name": "createConfig",
|
||||||
|
"id": "create-config",
|
||||||
|
"path": "/nx-api/angular-rsbuild/documents/create-config",
|
||||||
|
"file": "shared/guides/angular-rspack/api/nx-angular-rsbuild/create-config"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "createServer",
|
||||||
|
"id": "create-server",
|
||||||
|
"path": "/nx-api/angular-rsbuild/documents/create-server",
|
||||||
|
"file": "shared/guides/angular-rspack/api/nx-angular-rsbuild/create-server"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "react",
|
"name": "react",
|
||||||
"id": "react",
|
"id": "react",
|
||||||
|
|||||||
@ -49,19 +49,35 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "angular-rspack",
|
||||||
|
"packageName": "@nx/angular-rspack",
|
||||||
|
"description": "Rspack Plugin for building Angular applications with Rspack."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "angular-rsbuild",
|
||||||
|
"packageName": "@nx/angular-rsbuild",
|
||||||
|
"description": "Rsbuild Plugin for building Angular applications with Rsbuild."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "create-nx-plugin",
|
"name": "create-nx-plugin",
|
||||||
"packageName": "create-nx-plugin",
|
"packageName": "create-nx-plugin",
|
||||||
"description": "This package is used to scaffold a brand-new workspace used to develop an Nx plugin, and sets up a pre-configured plugin with the specified name. The new plugin is created with a default generator, executor, and e2e app.",
|
"description": "This package is used to scaffold a brand-new workspace used to develop an Nx plugin, and sets up a pre-configured plugin with the specified name. The new plugin is created with a default generator, executor, and e2e app.",
|
||||||
"path": "generated/packages/create-nx-plugin.json",
|
"path": "generated/packages/create-nx-plugin.json",
|
||||||
"schemas": { "executors": [], "generators": [] }
|
"schemas": {
|
||||||
|
"executors": [],
|
||||||
|
"generators": []
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "create-nx-workspace",
|
"name": "create-nx-workspace",
|
||||||
"packageName": "create-nx-workspace",
|
"packageName": "create-nx-workspace",
|
||||||
"description": "Smart Monorepos · Fast CI",
|
"description": "Smart Monorepos · Fast CI",
|
||||||
"path": "generated/packages/create-nx-workspace.json",
|
"path": "generated/packages/create-nx-workspace.json",
|
||||||
"schemas": { "executors": [], "generators": [] }
|
"schemas": {
|
||||||
|
"executors": [],
|
||||||
|
"generators": []
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "cypress",
|
"name": "cypress",
|
||||||
@ -93,7 +109,10 @@
|
|||||||
"packageName": "devkit",
|
"packageName": "devkit",
|
||||||
"description": "The Nx Devkit is used to customize Nx for different technologies and use cases. It contains many utility functions for reading and writing files, updating configuration, working with Abstract Syntax Trees(ASTs), and more. Learn more about [extending Nx by leveraging the Nx Devkit](https://nx.dev/extending-nx/intro/getting-started) on our docs.",
|
"description": "The Nx Devkit is used to customize Nx for different technologies and use cases. It contains many utility functions for reading and writing files, updating configuration, working with Abstract Syntax Trees(ASTs), and more. Learn more about [extending Nx by leveraging the Nx Devkit](https://nx.dev/extending-nx/intro/getting-started) on our docs.",
|
||||||
"path": "generated/packages/devkit.json",
|
"path": "generated/packages/devkit.json",
|
||||||
"schemas": { "executors": [], "generators": [] }
|
"schemas": {
|
||||||
|
"executors": [],
|
||||||
|
"generators": []
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "esbuild",
|
"name": "esbuild",
|
||||||
@ -110,7 +129,10 @@
|
|||||||
"packageName": "eslint-plugin",
|
"packageName": "eslint-plugin",
|
||||||
"description": "The eslint-plugin package is an ESLint plugin that contains a collection of recommended ESLint rule configurations which you can extend from in your own ESLint configs, as well as an Nx-specific lint rule called enforce-module-boundaries.",
|
"description": "The eslint-plugin package is an ESLint plugin that contains a collection of recommended ESLint rule configurations which you can extend from in your own ESLint configs, as well as an Nx-specific lint rule called enforce-module-boundaries.",
|
||||||
"path": "generated/packages/eslint-plugin.json",
|
"path": "generated/packages/eslint-plugin.json",
|
||||||
"schemas": { "executors": [], "generators": [] }
|
"schemas": {
|
||||||
|
"executors": [],
|
||||||
|
"generators": []
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "expo",
|
"name": "expo",
|
||||||
@ -146,14 +168,20 @@
|
|||||||
"packageName": "express",
|
"packageName": "express",
|
||||||
"description": "The Nx Plugin for Express contains executors and generators for allowing your workspace to create powerful Express Node applications and APIs.",
|
"description": "The Nx Plugin for Express contains executors and generators for allowing your workspace to create powerful Express Node applications and APIs.",
|
||||||
"path": "generated/packages/express.json",
|
"path": "generated/packages/express.json",
|
||||||
"schemas": { "executors": [], "generators": ["init", "application"] }
|
"schemas": {
|
||||||
|
"executors": [],
|
||||||
|
"generators": ["init", "application"]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jest",
|
"name": "jest",
|
||||||
"packageName": "jest",
|
"packageName": "jest",
|
||||||
"description": "The Nx Plugin for Jest contains executors and generators allowing your workspace to use the powerful Jest testing capabilities.",
|
"description": "The Nx Plugin for Jest contains executors and generators allowing your workspace to use the powerful Jest testing capabilities.",
|
||||||
"path": "generated/packages/jest.json",
|
"path": "generated/packages/jest.json",
|
||||||
"schemas": { "executors": ["jest"], "generators": ["init", "jest-project"] }
|
"schemas": {
|
||||||
|
"executors": ["jest"],
|
||||||
|
"generators": ["init", "jest-project"]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "js",
|
"name": "js",
|
||||||
@ -345,7 +373,10 @@
|
|||||||
"packageName": "tao",
|
"packageName": "tao",
|
||||||
"description": "CLI for generating code and running commands",
|
"description": "CLI for generating code and running commands",
|
||||||
"path": "generated/packages/tao.json",
|
"path": "generated/packages/tao.json",
|
||||||
"schemas": { "executors": [], "generators": [] }
|
"schemas": {
|
||||||
|
"executors": [],
|
||||||
|
"generators": []
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "vite",
|
"name": "vite",
|
||||||
|
|||||||
@ -0,0 +1,371 @@
|
|||||||
|
---
|
||||||
|
title: 'createConfig - @nx/angular-rsbuild'
|
||||||
|
description: 'API Reference for createConfig from @nx/angular-rsbuild'
|
||||||
|
---
|
||||||
|
|
||||||
|
# createConfig
|
||||||
|
|
||||||
|
```bash
|
||||||
|
import { createConfig } from '@nx/angular-rsbuild';
|
||||||
|
```
|
||||||
|
|
||||||
|
The `createConfig` function is used to create an Rsbuild configuration object setup for Angular applications.
|
||||||
|
|
||||||
|
It takes an optional `RsbuildConfig` object as an argument, which allows for customization of the Rsbuild configuration.
|
||||||
|
|
||||||
|
```ts
|
||||||
|
async function createConfig(
|
||||||
|
defaultOptions: {
|
||||||
|
options: PluginAngularOptions;
|
||||||
|
rsbuildConfigOverrides?: Partial<RsbuildConfig>;
|
||||||
|
},
|
||||||
|
configurations: Record<
|
||||||
|
string,
|
||||||
|
{
|
||||||
|
options: Partial<PluginAngularOptions>;
|
||||||
|
rsbuildConfigOverrides?: Partial<RsbuildConfig>;
|
||||||
|
}
|
||||||
|
> = {},
|
||||||
|
configEnvVar = 'NGRS_CONFIG'
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
{% tabs %}
|
||||||
|
|
||||||
|
{% tab label="Server-Side Rendering (SSR)" %}
|
||||||
|
The following example shows how to create a configuration for a SSR application:
|
||||||
|
|
||||||
|
```ts {% fileName="myapp/rsbuild.config.ts" %}
|
||||||
|
import { createConfig } from '@nx/angular-rsbuild';
|
||||||
|
|
||||||
|
export default createConfig({
|
||||||
|
options: {
|
||||||
|
browser: './src/main.ts',
|
||||||
|
server: './src/main.server.ts',
|
||||||
|
ssrEntry: './src/server.ts',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
{% /tab %}
|
||||||
|
|
||||||
|
{% tab label="Client-Side Rendering (CSR)" %}
|
||||||
|
The following example shows how to create a configuration for a CSR application:
|
||||||
|
|
||||||
|
```ts {% fileName="myapp/rsbuild.config.ts" %}
|
||||||
|
import { createConfig } from '@nx/angular-rsbuild';
|
||||||
|
|
||||||
|
export default createConfig({
|
||||||
|
options: {
|
||||||
|
browser: './src/main.ts',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
{% /tab %}
|
||||||
|
|
||||||
|
{% tab label="Modify Rsbuild Configuration" %}
|
||||||
|
The following example shows how to modify the base Rsbuild configuration:
|
||||||
|
|
||||||
|
```ts {% fileName="myapp/rsbuild.config.ts" %}
|
||||||
|
import { createConfig } from '@nx/angular-rsbuild';
|
||||||
|
|
||||||
|
export default createConfig({
|
||||||
|
options: {
|
||||||
|
browser: './src/main.ts',
|
||||||
|
server: './src/main.server.ts',
|
||||||
|
ssrEntry: './src/server.ts',
|
||||||
|
},
|
||||||
|
rsbuildConfigOverrides: {
|
||||||
|
mode: 'development',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
{% /tab %}
|
||||||
|
|
||||||
|
{% tab label="File Replacements" %}
|
||||||
|
The following example shows how to use file replacements:
|
||||||
|
|
||||||
|
```ts {% fileName="myapp/rsbuild.config.ts" %}
|
||||||
|
import { createConfig } from '@nx/angular-rsbuild';
|
||||||
|
|
||||||
|
export default createConfig({
|
||||||
|
options: {
|
||||||
|
browser: './src/main.ts',
|
||||||
|
server: './src/main.server.ts',
|
||||||
|
ssrEntry: './src/server.ts',
|
||||||
|
fileReplacements: [
|
||||||
|
{
|
||||||
|
replace: './src/environments/environment.ts',
|
||||||
|
with: './src/environments/environment.prod.ts',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
{% /tab %}
|
||||||
|
|
||||||
|
{% /tabs %}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## PluginAngularOptions
|
||||||
|
|
||||||
|
The `PluginAngularOptions` object is an object that contains the following properties:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
export interface PluginAngularOptions extends PluginUnsupportedOptions {
|
||||||
|
aot?: boolean;
|
||||||
|
assets?: AssetElement[];
|
||||||
|
browser?: string;
|
||||||
|
commonChunk?: boolean;
|
||||||
|
devServer?: DevServerOptions;
|
||||||
|
extractLicenses?: boolean;
|
||||||
|
fileReplacements?: FileReplacement[];
|
||||||
|
index?: IndexElement;
|
||||||
|
inlineStyleLanguage?: InlineStyleLanguage;
|
||||||
|
namedChunks?: boolean;
|
||||||
|
optimization?: boolean | OptimizationOptions;
|
||||||
|
outputHashing?: OutputHashing;
|
||||||
|
outputPath?:
|
||||||
|
| string
|
||||||
|
| (Required<Pick<OutputPath, 'base'>> & Partial<OutputPath>);
|
||||||
|
polyfills?: string[];
|
||||||
|
root?: string;
|
||||||
|
scripts?: ScriptOrStyleEntry[];
|
||||||
|
server?: string;
|
||||||
|
skipTypeChecking?: boolean;
|
||||||
|
sourceMap?: boolean | Partial<SourceMap>;
|
||||||
|
ssr?:
|
||||||
|
| boolean
|
||||||
|
| {
|
||||||
|
entry: string;
|
||||||
|
experimentalPlatform?: 'node' | 'neutral';
|
||||||
|
};
|
||||||
|
stylePreprocessorOptions?: StylePreprocessorOptions;
|
||||||
|
styles?: ScriptOrStyleEntry[];
|
||||||
|
tsConfig?: string;
|
||||||
|
useTsProjectReferences?: boolean;
|
||||||
|
vendorChunk?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DevServerOptions extends DevServerUnsupportedOptions {
|
||||||
|
port?: number;
|
||||||
|
ssl?: boolean;
|
||||||
|
sslKey?: string;
|
||||||
|
sslCert?: string;
|
||||||
|
proxyConfig?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OptimizationOptions {
|
||||||
|
scripts?: boolean;
|
||||||
|
styles?: boolean;
|
||||||
|
fonts?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type OutputHashing = 'none' | 'all' | 'media' | 'bundles';
|
||||||
|
export type HashFormat = {
|
||||||
|
chunk: string;
|
||||||
|
extract: string;
|
||||||
|
file: string;
|
||||||
|
script: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface OutputPath {
|
||||||
|
base: string;
|
||||||
|
browser: string;
|
||||||
|
server: string;
|
||||||
|
media: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type AssetExpandedDefinition = {
|
||||||
|
glob: string;
|
||||||
|
input: string;
|
||||||
|
ignore?: string[];
|
||||||
|
output?: string;
|
||||||
|
};
|
||||||
|
export type AssetElement = AssetExpandedDefinition | string;
|
||||||
|
export type NormalizedAssetElement = AssetExpandedDefinition & {
|
||||||
|
output: string;
|
||||||
|
};
|
||||||
|
export type ScriptOrStyleEntry =
|
||||||
|
| string
|
||||||
|
| {
|
||||||
|
input: string;
|
||||||
|
bundleName?: string;
|
||||||
|
inject?: boolean;
|
||||||
|
};
|
||||||
|
export type GlobalEntry = {
|
||||||
|
name: string;
|
||||||
|
files: string[];
|
||||||
|
initial: boolean;
|
||||||
|
};
|
||||||
|
export type IndexExpandedDefinition = {
|
||||||
|
input: string;
|
||||||
|
output?: string;
|
||||||
|
preloadInitial?: boolean;
|
||||||
|
};
|
||||||
|
export type IndexElement = IndexExpandedDefinition | string | false;
|
||||||
|
export type IndexHtmlTransform = (content: string) => Promise<string>;
|
||||||
|
export type NormalizedIndexElement =
|
||||||
|
| (IndexExpandedDefinition & {
|
||||||
|
insertionOrder: [string, boolean][];
|
||||||
|
transformer: IndexHtmlTransform | undefined;
|
||||||
|
})
|
||||||
|
| false;
|
||||||
|
|
||||||
|
export interface SourceMap {
|
||||||
|
scripts: boolean;
|
||||||
|
styles: boolean;
|
||||||
|
hidden: boolean;
|
||||||
|
vendor: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type InlineStyleExtension = 'css' | 'scss' | 'sass' | 'less';
|
||||||
|
export interface FileReplacement {
|
||||||
|
replace: string;
|
||||||
|
with: string;
|
||||||
|
}
|
||||||
|
export interface StylePreprocessorOptions {
|
||||||
|
includePaths?: string[];
|
||||||
|
sass?: Sass;
|
||||||
|
}
|
||||||
|
export interface Sass {
|
||||||
|
fatalDeprecations?: DeprecationOrId[];
|
||||||
|
futureDeprecations?: DeprecationOrId[];
|
||||||
|
silenceDeprecations?: DeprecationOrId[];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### aot
|
||||||
|
|
||||||
|
`boolean` `default: true`
|
||||||
|
Enables or disables Ahead-of-Time compilation for Angular applications.
|
||||||
|
|
||||||
|
### assets
|
||||||
|
|
||||||
|
`AssetElement[]`
|
||||||
|
Array of static assets to include in the build output. Can be either a string path or an object with glob patterns.
|
||||||
|
|
||||||
|
### browser
|
||||||
|
|
||||||
|
`string`
|
||||||
|
The entry point file for the browser bundle (e.g., 'src/main.ts').
|
||||||
|
|
||||||
|
### commonChunk
|
||||||
|
|
||||||
|
`boolean` `default: true`
|
||||||
|
Controls whether to create a separate bundle containing shared code between multiple chunks.
|
||||||
|
|
||||||
|
### devServer
|
||||||
|
|
||||||
|
`DevServerOptions`
|
||||||
|
RsbuildConfig options for the development server including port, SSL settings, and proxy configuration.
|
||||||
|
|
||||||
|
### extractLicenses
|
||||||
|
|
||||||
|
`boolean` `default: false`
|
||||||
|
When true, extracts all license information from dependencies into a separate file.
|
||||||
|
|
||||||
|
### fileReplacements
|
||||||
|
|
||||||
|
`FileReplacement[]`
|
||||||
|
List of files to be replaced during the build process, typically used for environment-specific configurations.
|
||||||
|
|
||||||
|
### index
|
||||||
|
|
||||||
|
`IndexElement`
|
||||||
|
Configuration for the index.html file. Can be a string path, an object with specific settings, or false to disable.
|
||||||
|
|
||||||
|
### inlineStyleLanguage
|
||||||
|
|
||||||
|
`InlineStyleLanguage`
|
||||||
|
Specifies the default language to use for inline styles in components.
|
||||||
|
|
||||||
|
### namedChunks
|
||||||
|
|
||||||
|
`boolean` `default: true`
|
||||||
|
When true, generates named chunks instead of numerical IDs.
|
||||||
|
|
||||||
|
### optimization
|
||||||
|
|
||||||
|
`boolean | OptimizationOptions` `default: true`
|
||||||
|
Controls build optimization settings for scripts, styles, and fonts.
|
||||||
|
|
||||||
|
### outputHashing
|
||||||
|
|
||||||
|
`OutputHashing` `default: 'none'`
|
||||||
|
Defines the hashing strategy for output files. Can be 'none', 'all', 'media', or 'bundles'.
|
||||||
|
|
||||||
|
### outputPath
|
||||||
|
|
||||||
|
`string | OutputPath`
|
||||||
|
Specifies the output directory for built files. Can be a string or an object defining paths for browser, server, and media files.
|
||||||
|
|
||||||
|
### polyfills
|
||||||
|
|
||||||
|
`string[]`
|
||||||
|
Array of polyfill files to include in the build.
|
||||||
|
|
||||||
|
### root
|
||||||
|
|
||||||
|
`string`
|
||||||
|
The root directory of the project where the rsbuild.config.ts file is located.
|
||||||
|
|
||||||
|
### scripts
|
||||||
|
|
||||||
|
`ScriptOrStyleEntry[]`
|
||||||
|
Array of global scripts to include in the build, with options for bundling and injection.
|
||||||
|
|
||||||
|
### server
|
||||||
|
|
||||||
|
`string`
|
||||||
|
The entry point file for the server bundle in SSR applications.
|
||||||
|
|
||||||
|
### skipTypeChecking
|
||||||
|
|
||||||
|
`boolean` `default: false`
|
||||||
|
When true, skips TypeScript type checking during the build process.
|
||||||
|
|
||||||
|
### sourceMap
|
||||||
|
|
||||||
|
`boolean | Partial<SourceMap>` `default: true`
|
||||||
|
Controls generation of source maps for debugging. Can be boolean or detailed configuration object.
|
||||||
|
|
||||||
|
### ssr
|
||||||
|
|
||||||
|
`boolean | { entry: string; experimentalPlatform?: 'node' | 'neutral' }`
|
||||||
|
Configuration for Server-Side Rendering. Can be boolean or object with specific SSR settings.
|
||||||
|
|
||||||
|
### stylePreprocessorOptions
|
||||||
|
|
||||||
|
`StylePreprocessorOptions`
|
||||||
|
Options for style preprocessors, including include paths and Sass-specific configurations.
|
||||||
|
|
||||||
|
### styles
|
||||||
|
|
||||||
|
`ScriptOrStyleEntry[]`
|
||||||
|
Array of global styles to include in the build, with options for bundling and injection.
|
||||||
|
|
||||||
|
### tsConfig
|
||||||
|
|
||||||
|
`string`
|
||||||
|
Path to the TypeScript configuration file.
|
||||||
|
|
||||||
|
### useTsProjectReferences
|
||||||
|
|
||||||
|
`boolean` `default: false`
|
||||||
|
Enables usage of TypeScript project references.
|
||||||
|
|
||||||
|
### vendorChunk
|
||||||
|
|
||||||
|
`boolean` `default: true`
|
||||||
|
When true, creates a separate bundle for vendor (third-party) code.
|
||||||
@ -0,0 +1,78 @@
|
|||||||
|
---
|
||||||
|
title: 'createServer - @nx/angular-rsbuild/ssr'
|
||||||
|
description: 'API Reference for createServer from @nx/angular-rsbuild/ssr'
|
||||||
|
---
|
||||||
|
|
||||||
|
# createServer
|
||||||
|
|
||||||
|
```bash
|
||||||
|
import { createServer } from '@nx/angular-rsbuild/ssr';
|
||||||
|
```
|
||||||
|
|
||||||
|
The `createServer` function is used to setup Angular's `CommonEngine` using an `express` server. It takes the bootstrap function as an argument, which is the function that bootstraps the Angular server application. This is usually` main.server.ts`. It returns `RsbuildAngularServer` which contains the server instance to allow further modifications as well as the listen method to start the server.
|
||||||
|
|
||||||
|
```ts
|
||||||
|
function createServer(bootstrap: any): RsbuildAngularServer;
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
{% tabs %}
|
||||||
|
{% tab label="Standard Express Server Usage" %}
|
||||||
|
The following example shows how to create a standard express server:
|
||||||
|
|
||||||
|
```ts {% fileName="myapp/src/server.ts" %}
|
||||||
|
import { createServer } from '@nx/angular-rsbuild/ssr';
|
||||||
|
import bootstrap from './main.server';
|
||||||
|
|
||||||
|
const server = createServer(bootstrap);
|
||||||
|
|
||||||
|
/** Add your custom server logic here
|
||||||
|
*
|
||||||
|
* For example, you can add a custom static file server:
|
||||||
|
*
|
||||||
|
* server.app.use('/static', express.static(staticFolder));
|
||||||
|
*
|
||||||
|
* Or add additional api routes:
|
||||||
|
*
|
||||||
|
* server.app.get('/api/hello', (req, res) => {
|
||||||
|
* res.send('Hello World!');
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* Or add additional middleware:
|
||||||
|
*
|
||||||
|
* server.app.use((req, res, next) => {
|
||||||
|
* res.send('Hello World!');
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
|
||||||
|
server.listen();
|
||||||
|
```
|
||||||
|
|
||||||
|
{% /tab %}
|
||||||
|
{% /tabs %}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## RsbuildAngularServer
|
||||||
|
|
||||||
|
```ts
|
||||||
|
export interface RsbuildAngularServer {
|
||||||
|
app: express.Express;
|
||||||
|
listen: (port?: number) => void;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `app`
|
||||||
|
|
||||||
|
`express.Express`
|
||||||
|
The express application instance.
|
||||||
|
|
||||||
|
### `listen`
|
||||||
|
|
||||||
|
`(port?: number) => void`
|
||||||
|
Starts the express application on the specified port. If no port is provided, the default port (4000) is used.
|
||||||
@ -0,0 +1,371 @@
|
|||||||
|
---
|
||||||
|
title: 'createConfig - @nx/angular-rspack'
|
||||||
|
description: 'API Reference for createConfig from @nx/angular-rspack'
|
||||||
|
---
|
||||||
|
|
||||||
|
# createConfig
|
||||||
|
|
||||||
|
```bash
|
||||||
|
import { createConfig } from '@nx/angular-rspack';
|
||||||
|
```
|
||||||
|
|
||||||
|
The `createConfig` function is used to create an Rspack configuration object setup for Angular applications.
|
||||||
|
|
||||||
|
It takes an optional `Configuration` object as an argument, which allows for customization of the Rspack configuration.
|
||||||
|
|
||||||
|
```ts
|
||||||
|
async function createConfig(
|
||||||
|
defaultOptions: {
|
||||||
|
options: AngularRspackPluginOptions;
|
||||||
|
rspackConfigOverrides?: Partial<Configuration>;
|
||||||
|
},
|
||||||
|
configurations: Record<
|
||||||
|
string,
|
||||||
|
{
|
||||||
|
options: Partial<AngularRspackPluginOptions>;
|
||||||
|
rspackConfigOverrides?: Partial<Configuration>;
|
||||||
|
}
|
||||||
|
> = {},
|
||||||
|
configEnvVar = 'NGRS_CONFIG'
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
{% tabs %}
|
||||||
|
|
||||||
|
{% tab label="Server-Side Rendering (SSR)" %}
|
||||||
|
The following example shows how to create a configuration for a SSR application:
|
||||||
|
|
||||||
|
```ts {% fileName="myapp/rspack.config.ts" %}
|
||||||
|
import { createConfig } from '@nx/angular-rspack';
|
||||||
|
|
||||||
|
export default createConfig({
|
||||||
|
options: {
|
||||||
|
browser: './src/main.ts',
|
||||||
|
server: './src/main.server.ts',
|
||||||
|
ssrEntry: './src/server.ts',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
{% /tab %}
|
||||||
|
|
||||||
|
{% tab label="Client-Side Rendering (CSR)" %}
|
||||||
|
The following example shows how to create a configuration for a CSR application:
|
||||||
|
|
||||||
|
```ts {% fileName="myapp/rspack.config.ts" %}
|
||||||
|
import { createConfig } from '@nx/angular-rspack';
|
||||||
|
|
||||||
|
export default createConfig({
|
||||||
|
options: {
|
||||||
|
browser: './src/main.ts',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
{% /tab %}
|
||||||
|
|
||||||
|
{% tab label="Modify Rspack Configuration" %}
|
||||||
|
The following example shows how to modify the base Rspack configuration:
|
||||||
|
|
||||||
|
```ts {% fileName="myapp/rspack.config.ts" %}
|
||||||
|
import { createConfig } from '@nx/angular-rspack';
|
||||||
|
|
||||||
|
export default createConfig({
|
||||||
|
options: {
|
||||||
|
browser: './src/main.ts',
|
||||||
|
server: './src/main.server.ts',
|
||||||
|
ssrEntry: './src/server.ts',
|
||||||
|
},
|
||||||
|
rspackConfigOverrides: {
|
||||||
|
mode: 'development',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
{% /tab %}
|
||||||
|
|
||||||
|
{% tab label="File Replacements" %}
|
||||||
|
The following example shows how to use file replacements:
|
||||||
|
|
||||||
|
```ts {% fileName="myapp/rspack.config.ts" %}
|
||||||
|
import { createConfig } from '@nx/angular-rspack';
|
||||||
|
|
||||||
|
export default createConfig({
|
||||||
|
options: {
|
||||||
|
browser: './src/main.ts',
|
||||||
|
server: './src/main.server.ts',
|
||||||
|
ssrEntry: './src/server.ts',
|
||||||
|
fileReplacements: [
|
||||||
|
{
|
||||||
|
replace: './src/environments/environment.ts',
|
||||||
|
with: './src/environments/environment.prod.ts',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
{% /tab %}
|
||||||
|
|
||||||
|
{% /tabs %}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## AngularRspackPluginOptions
|
||||||
|
|
||||||
|
The `AngularRspackPluginOptions` object is an object that contains the following properties:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
export interface AngularRspackPluginOptions extends PluginUnsupportedOptions {
|
||||||
|
aot?: boolean;
|
||||||
|
assets?: AssetElement[];
|
||||||
|
browser?: string;
|
||||||
|
commonChunk?: boolean;
|
||||||
|
devServer?: DevServerOptions;
|
||||||
|
extractLicenses?: boolean;
|
||||||
|
fileReplacements?: FileReplacement[];
|
||||||
|
index?: IndexElement;
|
||||||
|
inlineStyleLanguage?: InlineStyleLanguage;
|
||||||
|
namedChunks?: boolean;
|
||||||
|
optimization?: boolean | OptimizationOptions;
|
||||||
|
outputHashing?: OutputHashing;
|
||||||
|
outputPath?:
|
||||||
|
| string
|
||||||
|
| (Required<Pick<OutputPath, 'base'>> & Partial<OutputPath>);
|
||||||
|
polyfills?: string[];
|
||||||
|
root?: string;
|
||||||
|
scripts?: ScriptOrStyleEntry[];
|
||||||
|
server?: string;
|
||||||
|
skipTypeChecking?: boolean;
|
||||||
|
sourceMap?: boolean | Partial<SourceMap>;
|
||||||
|
ssr?:
|
||||||
|
| boolean
|
||||||
|
| {
|
||||||
|
entry: string;
|
||||||
|
experimentalPlatform?: 'node' | 'neutral';
|
||||||
|
};
|
||||||
|
stylePreprocessorOptions?: StylePreprocessorOptions;
|
||||||
|
styles?: ScriptOrStyleEntry[];
|
||||||
|
tsConfig?: string;
|
||||||
|
useTsProjectReferences?: boolean;
|
||||||
|
vendorChunk?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DevServerOptions extends DevServerUnsupportedOptions {
|
||||||
|
port?: number;
|
||||||
|
ssl?: boolean;
|
||||||
|
sslKey?: string;
|
||||||
|
sslCert?: string;
|
||||||
|
proxyConfig?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OptimizationOptions {
|
||||||
|
scripts?: boolean;
|
||||||
|
styles?: boolean;
|
||||||
|
fonts?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type OutputHashing = 'none' | 'all' | 'media' | 'bundles';
|
||||||
|
export type HashFormat = {
|
||||||
|
chunk: string;
|
||||||
|
extract: string;
|
||||||
|
file: string;
|
||||||
|
script: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface OutputPath {
|
||||||
|
base: string;
|
||||||
|
browser: string;
|
||||||
|
server: string;
|
||||||
|
media: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type AssetExpandedDefinition = {
|
||||||
|
glob: string;
|
||||||
|
input: string;
|
||||||
|
ignore?: string[];
|
||||||
|
output?: string;
|
||||||
|
};
|
||||||
|
export type AssetElement = AssetExpandedDefinition | string;
|
||||||
|
export type NormalizedAssetElement = AssetExpandedDefinition & {
|
||||||
|
output: string;
|
||||||
|
};
|
||||||
|
export type ScriptOrStyleEntry =
|
||||||
|
| string
|
||||||
|
| {
|
||||||
|
input: string;
|
||||||
|
bundleName?: string;
|
||||||
|
inject?: boolean;
|
||||||
|
};
|
||||||
|
export type GlobalEntry = {
|
||||||
|
name: string;
|
||||||
|
files: string[];
|
||||||
|
initial: boolean;
|
||||||
|
};
|
||||||
|
export type IndexExpandedDefinition = {
|
||||||
|
input: string;
|
||||||
|
output?: string;
|
||||||
|
preloadInitial?: boolean;
|
||||||
|
};
|
||||||
|
export type IndexElement = IndexExpandedDefinition | string | false;
|
||||||
|
export type IndexHtmlTransform = (content: string) => Promise<string>;
|
||||||
|
export type NormalizedIndexElement =
|
||||||
|
| (IndexExpandedDefinition & {
|
||||||
|
insertionOrder: [string, boolean][];
|
||||||
|
transformer: IndexHtmlTransform | undefined;
|
||||||
|
})
|
||||||
|
| false;
|
||||||
|
|
||||||
|
export interface SourceMap {
|
||||||
|
scripts: boolean;
|
||||||
|
styles: boolean;
|
||||||
|
hidden: boolean;
|
||||||
|
vendor: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type InlineStyleExtension = 'css' | 'scss' | 'sass' | 'less';
|
||||||
|
export interface FileReplacement {
|
||||||
|
replace: string;
|
||||||
|
with: string;
|
||||||
|
}
|
||||||
|
export interface StylePreprocessorOptions {
|
||||||
|
includePaths?: string[];
|
||||||
|
sass?: Sass;
|
||||||
|
}
|
||||||
|
export interface Sass {
|
||||||
|
fatalDeprecations?: DeprecationOrId[];
|
||||||
|
futureDeprecations?: DeprecationOrId[];
|
||||||
|
silenceDeprecations?: DeprecationOrId[];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### aot
|
||||||
|
|
||||||
|
`boolean` `default: true`
|
||||||
|
Enables or disables Ahead-of-Time compilation for Angular applications.
|
||||||
|
|
||||||
|
### assets
|
||||||
|
|
||||||
|
`AssetElement[]`
|
||||||
|
Array of static assets to include in the build output. Can be either a string path or an object with glob patterns.
|
||||||
|
|
||||||
|
### browser
|
||||||
|
|
||||||
|
`string`
|
||||||
|
The entry point file for the browser bundle (e.g., 'src/main.ts').
|
||||||
|
|
||||||
|
### commonChunk
|
||||||
|
|
||||||
|
`boolean` `default: true`
|
||||||
|
Controls whether to create a separate bundle containing shared code between multiple chunks.
|
||||||
|
|
||||||
|
### devServer
|
||||||
|
|
||||||
|
`DevServerOptions`
|
||||||
|
Configuration options for the development server including port, SSL settings, and proxy configuration.
|
||||||
|
|
||||||
|
### extractLicenses
|
||||||
|
|
||||||
|
`boolean` `default: false`
|
||||||
|
When true, extracts all license information from dependencies into a separate file.
|
||||||
|
|
||||||
|
### fileReplacements
|
||||||
|
|
||||||
|
`FileReplacement[]`
|
||||||
|
List of files to be replaced during the build process, typically used for environment-specific configurations.
|
||||||
|
|
||||||
|
### index
|
||||||
|
|
||||||
|
`IndexElement`
|
||||||
|
Configuration for the index.html file. Can be a string path, an object with specific settings, or false to disable.
|
||||||
|
|
||||||
|
### inlineStyleLanguage
|
||||||
|
|
||||||
|
`InlineStyleLanguage`
|
||||||
|
Specifies the default language to use for inline styles in components.
|
||||||
|
|
||||||
|
### namedChunks
|
||||||
|
|
||||||
|
`boolean` `default: true`
|
||||||
|
When true, generates named chunks instead of numerical IDs.
|
||||||
|
|
||||||
|
### optimization
|
||||||
|
|
||||||
|
`boolean | OptimizationOptions` `default: true`
|
||||||
|
Controls build optimization settings for scripts, styles, and fonts.
|
||||||
|
|
||||||
|
### outputHashing
|
||||||
|
|
||||||
|
`OutputHashing` `default: 'none'`
|
||||||
|
Defines the hashing strategy for output files. Can be 'none', 'all', 'media', or 'bundles'.
|
||||||
|
|
||||||
|
### outputPath
|
||||||
|
|
||||||
|
`string | OutputPath`
|
||||||
|
Specifies the output directory for built files. Can be a string or an object defining paths for browser, server, and media files.
|
||||||
|
|
||||||
|
### polyfills
|
||||||
|
|
||||||
|
`string[]`
|
||||||
|
Array of polyfill files to include in the build.
|
||||||
|
|
||||||
|
### root
|
||||||
|
|
||||||
|
`string`
|
||||||
|
The root directory of the project where the rspack.config.ts file is located.
|
||||||
|
|
||||||
|
### scripts
|
||||||
|
|
||||||
|
`ScriptOrStyleEntry[]`
|
||||||
|
Array of global scripts to include in the build, with options for bundling and injection.
|
||||||
|
|
||||||
|
### server
|
||||||
|
|
||||||
|
`string`
|
||||||
|
The entry point file for the server bundle in SSR applications.
|
||||||
|
|
||||||
|
### skipTypeChecking
|
||||||
|
|
||||||
|
`boolean` `default: false`
|
||||||
|
When true, skips TypeScript type checking during the build process.
|
||||||
|
|
||||||
|
### sourceMap
|
||||||
|
|
||||||
|
`boolean | Partial<SourceMap>` `default: true`
|
||||||
|
Controls generation of source maps for debugging. Can be boolean or detailed configuration object.
|
||||||
|
|
||||||
|
### ssr
|
||||||
|
|
||||||
|
`boolean | { entry: string; experimentalPlatform?: 'node' | 'neutral' }`
|
||||||
|
Configuration for Server-Side Rendering. Can be boolean or object with specific SSR settings.
|
||||||
|
|
||||||
|
### stylePreprocessorOptions
|
||||||
|
|
||||||
|
`StylePreprocessorOptions`
|
||||||
|
Options for style preprocessors, including include paths and Sass-specific configurations.
|
||||||
|
|
||||||
|
### styles
|
||||||
|
|
||||||
|
`ScriptOrStyleEntry[]`
|
||||||
|
Array of global styles to include in the build, with options for bundling and injection.
|
||||||
|
|
||||||
|
### tsConfig
|
||||||
|
|
||||||
|
`string`
|
||||||
|
Path to the TypeScript configuration file.
|
||||||
|
|
||||||
|
### useTsProjectReferences
|
||||||
|
|
||||||
|
`boolean` `default: false`
|
||||||
|
Enables usage of TypeScript project references.
|
||||||
|
|
||||||
|
### vendorChunk
|
||||||
|
|
||||||
|
`boolean` `default: true`
|
||||||
|
When true, creates a separate bundle for vendor (third-party) code.
|
||||||
@ -0,0 +1,110 @@
|
|||||||
|
---
|
||||||
|
title: 'createServer - @nx/angular-rspack/ssr'
|
||||||
|
description: 'API Reference for createServer from @nx/angular-rspack/ssr'
|
||||||
|
---
|
||||||
|
|
||||||
|
# createServer
|
||||||
|
|
||||||
|
```bash
|
||||||
|
import { createServer } from '@nx/angular-rspack/ssr';
|
||||||
|
```
|
||||||
|
|
||||||
|
The `createServer` function is used to setup Angular's `CommonEngine` using an `express` server. It takes the bootstrap function as an argument, which is the function that bootstraps the Angular server application. This is usually` main.server.ts`. It returns `RsbuildAngularServer` which contains the server instance to allow further modifications as well as the listen method to start the server.
|
||||||
|
|
||||||
|
```ts
|
||||||
|
function createServer(
|
||||||
|
bootstrap: any,
|
||||||
|
opts?: RspackAngularServerOptions
|
||||||
|
): RspackAngularServer;
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
{% tabs %}
|
||||||
|
{% tab label="Standard Express Server Usage" %}
|
||||||
|
The following example shows how to create a standard express server:
|
||||||
|
|
||||||
|
```ts {% fileName="myapp/src/server.ts" %}
|
||||||
|
import { createServer } from '@nx/angular-rspack/ssr';
|
||||||
|
import bootstrap from './main.server';
|
||||||
|
|
||||||
|
const server = createServer(bootstrap);
|
||||||
|
|
||||||
|
/** Add your custom server logic here
|
||||||
|
*
|
||||||
|
* For example, you can add a custom static file server:
|
||||||
|
*
|
||||||
|
* server.app.use('/static', express.static(staticFolder));
|
||||||
|
*
|
||||||
|
* Or add additional api routes:
|
||||||
|
*
|
||||||
|
* server.app.get('/api/hello', (req, res) => {
|
||||||
|
* res.send('Hello World!');
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* Or add additional middleware:
|
||||||
|
*
|
||||||
|
* server.app.use((req, res, next) => {
|
||||||
|
* res.send('Hello World!');
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
|
||||||
|
server.listen();
|
||||||
|
```
|
||||||
|
|
||||||
|
{% /tab %}
|
||||||
|
{% /tabs %}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## RspackAngularServer
|
||||||
|
|
||||||
|
```ts
|
||||||
|
export interface RspackAngularServer {
|
||||||
|
app: express.Express;
|
||||||
|
listen: (port?: number) => void;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `app`
|
||||||
|
|
||||||
|
`express.Express`
|
||||||
|
The express application instance.
|
||||||
|
|
||||||
|
### `listen`
|
||||||
|
|
||||||
|
`(port?: number) => void`
|
||||||
|
Starts the express application on the specified port. If no port is provided, the default port (4000) is used.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## RspackAngularServerOptions
|
||||||
|
|
||||||
|
```ts
|
||||||
|
export interface RspackAngularServerOptions {
|
||||||
|
serverDistFolder?: string;
|
||||||
|
browserDistFolder?: string;
|
||||||
|
indexHtml?: string;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `serverDistFolder`
|
||||||
|
|
||||||
|
`string`
|
||||||
|
The folder where the server bundle is located. Defaults to the `dist/server` folder.
|
||||||
|
|
||||||
|
### `browserDistFolder`
|
||||||
|
|
||||||
|
`string`
|
||||||
|
The folder where the browser bundle is located. Defaults to the `dist/browser` folder.
|
||||||
|
|
||||||
|
### `indexHtml`
|
||||||
|
|
||||||
|
`string`
|
||||||
|
The path to the index.html file. Defaults to the `index.html` file in the `browserDistFolder`.
|
||||||
57
docs/shared/guides/angular-rspack/handling-configurations.md
Normal file
57
docs/shared/guides/angular-rspack/handling-configurations.md
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
title: 'Handling Configurations'
|
||||||
|
description: 'Guide on how to handle configurations with Angular Rspack'
|
||||||
|
---
|
||||||
|
|
||||||
|
# Handling Configurations
|
||||||
|
|
||||||
|
Configurations are handled slightly differently compared to the Angular CLI. Rsbuild and Rspack use `mode` instead of configurations to handle different environments by default. This means that a different solution is needed to handle different build configurations you may have to match the behavior of Angular's configuration handling.
|
||||||
|
|
||||||
|
The [`createConfig`](/nx-api/angular-rspack/documents/create-config) function helps you to handle this. It uses the `NGRS_CONFIG` environment variable to determine which configuration to use. The default configuration is `production`.
|
||||||
|
|
||||||
|
{% callout type="info" title="Roll your own" %}
|
||||||
|
You can handle configurations by yourself if you prefer, all you need is some manner of detecting the environment and then merging the options passed to `createConfig`.
|
||||||
|
{% /callout %}
|
||||||
|
|
||||||
|
## Using `createConfig` for configurations
|
||||||
|
|
||||||
|
The `createConfig` function takes two arguments, the first is the default options, and the second is an object of configurations. The configurations object is keyed by the name of the configuration, and the value is an object with the options and `rspackConfigOverrides | rsbuildConfigOverrides` to be used for that configuration.
|
||||||
|
|
||||||
|
```ts {% fileName="myapp/rspack.config.ts" %}
|
||||||
|
import { createConfig } from '@nx/angular-rspack';
|
||||||
|
export default createConfig(
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
browser: './src/main.ts',
|
||||||
|
server: './src/main.server.ts',
|
||||||
|
ssrEntry: './src/server.ts',
|
||||||
|
},
|
||||||
|
rspackConfigOverrides: {
|
||||||
|
mode: 'development',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
production: {
|
||||||
|
options: {
|
||||||
|
fileReplacements: [
|
||||||
|
{
|
||||||
|
replace: './src/environments/environment.ts',
|
||||||
|
with: './src/environments/environment.prod.ts',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
The above example shows how to handle the `production` configuration. The `options` are the same as the default options but with the `fileReplacements` property added, and the `rspackConfigOverrides` are the same as the default `rspackConfigOverrides`.
|
||||||
|
|
||||||
|
The `NGRS_CONFIG` environment variable is used to determine which configuration to use. If the environment variable is not set, the `production` configuration is used by default.
|
||||||
|
If a production configuration is not provided, the default configuration is used.
|
||||||
|
|
||||||
|
To run the build with the `production` configuration:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
NGRS_CONFIG=production npx myapp build
|
||||||
|
```
|
||||||
38
docs/shared/guides/angular-rspack/introduction.md
Normal file
38
docs/shared/guides/angular-rspack/introduction.md
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
title: 'Introduction - Angular Rspack and Rsbuild'
|
||||||
|
description: 'Learn how Rspack can help you speed up your Angular applications.'
|
||||||
|
---
|
||||||
|
|
||||||
|
# Introduction
|
||||||
|
|
||||||
|
Angular's compilation has always been a black box hidden behind layers of abstraction and configuration, exposed via the Angular Builders from the Angular CLI packages.
|
||||||
|
|
||||||
|
Originally, the underlying tool that bundled the Angular application was [Webpack](https://webpack.js.org). This was great as teams were able to extend their builds by leveraging the vast Webpack ecosystem and plugins that are available.
|
||||||
|
|
||||||
|
Over time, it became clear that the inherit slowness with Webpack build speeds was becoming more and more of an issue for Angular developers.
|
||||||
|
|
||||||
|
The Angular Team decided to address this build speed issue by building out a new build pipeline that leveraged [Esbuild](https://esbuild.github.io/).
|
||||||
|
|
||||||
|
This succeeded in reducing the build times for Angular applications, however, it made one crucial mistake. It left the existing Angular applications that relied on the Webpack ecosystem behind, with either a difficult migration path or none at all.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Rspack and Rsbuild
|
||||||
|
|
||||||
|
The solution to this problem was to create a new build pipeline that would be able to leverage the existing Webpack ecosystem and plugins, while also providing faster builds for Angular applications.
|
||||||
|
|
||||||
|
This is where [Rspack](https://rspack.dev) and [Rsbuild](https://rsbuild.dev) come into play.
|
||||||
|
|
||||||
|
Rspack is a high performance JavaScript bundler written in Rust. It offers strong compatibility with the Webpack ecosystem, allowing for almost seamless replacement of webpack, and provides lightning fast build speeds.
|
||||||
|
|
||||||
|
Because it supports the existing Webpack ecosystem, it provides an answer to teams that maintain Angular applications using Webpack and want to migrate to a faster build pipeline.
|
||||||
|
|
||||||
|
Rsbuild is a build tool based on Rspack, however it does not support the Webpack ecosystem. It does provide out-of-the-box (OOTB) Module Federation support and a plugin system for extending the build with build speeds comparable to Esbuild.
|
||||||
|
|
||||||
|
This makes it a great solution for teams that want to migrate to a faster build pipeline, but still want the ability to easily extend their builds and use [Module Federation](https://module-federation.io).
|
||||||
|
|
||||||
|
{% callout type="warning" title="Angular Rspack Status" %}
|
||||||
|
|
||||||
|
Please not that Angular Rspack support is still experimental and is not yet considered production ready. We are actively working on improving the experience and stability of Angular Rspack, and we will continue to update this page as we make progress.
|
||||||
|
|
||||||
|
{% /callout %}
|
||||||
BIN
docs/shared/guides/angular-rspack/logo-small.png
Normal file
BIN
docs/shared/guides/angular-rspack/logo-small.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
43
docs/shared/guides/angular-rspack/migrate-from-webpack.md
Normal file
43
docs/shared/guides/angular-rspack/migrate-from-webpack.md
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
title: 'Migrate Angular with Webpack to Rspack'
|
||||||
|
description: 'Guide on how to Migrate Angular projects using Webpack to Rspack'
|
||||||
|
---
|
||||||
|
|
||||||
|
# Migrate Angular with Webpack to Rspack
|
||||||
|
|
||||||
|
Until recently, Angular used Webpack to build applications. Based on this, some third-party builders emerged to allow users to use a custom Webpack configuration when building their Angular applications.
|
||||||
|
When Angular switched to Esbuild, this meant that it became difficult for applications that used custom Webpack configurations to migrate to the new build system. This guide will help you migrate from Angular with Webpack to Rspack.
|
||||||
|
By migrating to Rspack, you can gain an immediate build performance benefit while maintaining the your existing Webpack build toolchain.
|
||||||
|
|
||||||
|
## Step 1: Initialize Nx
|
||||||
|
|
||||||
|
{% callout type="warning" title="Optional Step" %}
|
||||||
|
If you are already using Nx with version 20.6.0 or greater, you can skip this step.
|
||||||
|
{% /callout %}
|
||||||
|
|
||||||
|
Nx provides a generator to convert existing Angular Webpack projects to use `@nx/angular-rspack`. This generator is currently available in Nx `20.6.0`.
|
||||||
|
|
||||||
|
At the root of your project, run the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx nx@latest init
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 2: Run the Convert to Rspack Generator
|
||||||
|
|
||||||
|
With Nx now initialized, the `@nx/angular` plugin will have been installed providing access to a series of generators and executors that aid Angular development.
|
||||||
|
In particular, the `@nx/angular:convert-to-rspack` generator will convert an Angular project to use Rspack.
|
||||||
|
To use it, run the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx nx g convert-to-rspack
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 3: Run your application
|
||||||
|
|
||||||
|
After running the generator, you can run tasks such as `build` and `serve` to build and serve your application.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx nx build yourProjectName
|
||||||
|
npx nx serve yourProjectName
|
||||||
|
```
|
||||||
@ -108,6 +108,10 @@
|
|||||||
- [Deploying Next.js applications to Vercel](/recipes/react/deploy-nextjs-to-vercel)
|
- [Deploying Next.js applications to Vercel](/recipes/react/deploy-nextjs-to-vercel)
|
||||||
- [React Compiler with Nx](/recipes/react/react-compiler)
|
- [React Compiler with Nx](/recipes/react/react-compiler)
|
||||||
- [Angular](/recipes/angular)
|
- [Angular](/recipes/angular)
|
||||||
|
- [Angular Rspack](/recipes/angular/rspack)
|
||||||
|
- [Introduction](/recipes/angular/rspack/introduction)
|
||||||
|
- [Migrate from Angular Webpack](/recipes/angular/rspack/migrate-from-webpack)
|
||||||
|
- [Handling Configurations](/recipes/angular/rspack/handling-configurations)
|
||||||
- [Migration](/recipes/angular/migration)
|
- [Migration](/recipes/angular/migration)
|
||||||
- [Migrating from Angular CLI](/recipes/angular/migration/angular)
|
- [Migrating from Angular CLI](/recipes/angular/migration/angular)
|
||||||
- [Migrating From Multiple Angular CLI Repos](/recipes/angular/migration/angular-multiple)
|
- [Migrating From Multiple Angular CLI Repos](/recipes/angular/migration/angular-multiple)
|
||||||
|
|||||||
@ -37,11 +37,67 @@ export class DocumentsApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.manifest = structuredClone(this.options.manifest);
|
this.manifest = structuredClone(this.options.manifest);
|
||||||
|
if (
|
||||||
|
options.id === 'angular-rspack-documents' ||
|
||||||
|
options.id === 'angular-rsbuild-documents'
|
||||||
|
) {
|
||||||
|
this.manifest = Object.assign(
|
||||||
|
this.manifest,
|
||||||
|
this.getAngularRspackPackage()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private getManifestKey(path: string): string {
|
private getManifestKey(path: string): string {
|
||||||
return '/' + path;
|
return '/' + path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(colum): Remove this once we move angular rspack into main repo (when stable).
|
||||||
|
getAngularRspackPackage(): Record<string, DocumentMetadata> {
|
||||||
|
return {
|
||||||
|
'/nx-api/angular-rspack/documents/create-config': {
|
||||||
|
id: 'create-config',
|
||||||
|
name: 'createConfig',
|
||||||
|
description: 'createConfig for @nx/angular-rspack',
|
||||||
|
path: '/nx-api/angular-rspack/documents/create-config',
|
||||||
|
file: 'shared/guides/angular-rspack/api/nx-angular-rspack/create-config',
|
||||||
|
isExternal: false,
|
||||||
|
itemList: [],
|
||||||
|
tags: [],
|
||||||
|
},
|
||||||
|
'/nx-api/angular-rspack/documents/create-server': {
|
||||||
|
id: 'create-server',
|
||||||
|
name: 'createServer',
|
||||||
|
description: 'createServer for @nx/angular-rspack',
|
||||||
|
path: '/nx-api/angular-rspack/documents/create-server',
|
||||||
|
file: 'shared/guides/angular-rspack/api/nx-angular-rspack/create-server',
|
||||||
|
isExternal: false,
|
||||||
|
itemList: [],
|
||||||
|
tags: [],
|
||||||
|
},
|
||||||
|
'/nx-api/angular-rsbuild/documents/create-config': {
|
||||||
|
id: 'create-config',
|
||||||
|
name: 'createConfig',
|
||||||
|
description: 'createConfig for @nx/angular-rsbuild',
|
||||||
|
path: '/nx-api/angular-rspack/documents/create-config',
|
||||||
|
file: 'shared/guides/angular-rspack/api/nx-angular-rsbuild/create-config',
|
||||||
|
isExternal: false,
|
||||||
|
itemList: [],
|
||||||
|
tags: [],
|
||||||
|
},
|
||||||
|
'/nx-api/angular-rsbuild/documents/create-server': {
|
||||||
|
id: 'create-server',
|
||||||
|
name: 'createServer',
|
||||||
|
description: 'createServer for @nx/angular-rsbuild',
|
||||||
|
path: '/nx-api/angular-rspack/documents/create-server',
|
||||||
|
file: 'shared/guides/angular-rspack/api/nx-angular-rsbuild/create-server',
|
||||||
|
isExternal: false,
|
||||||
|
itemList: [],
|
||||||
|
tags: [],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
getFilePath(path: string): string {
|
getFilePath(path: string): string {
|
||||||
return join(this.options.publicDocsRoot, `${path}.md`);
|
return join(this.options.publicDocsRoot, `${path}.md`);
|
||||||
}
|
}
|
||||||
@ -55,6 +111,7 @@ export class DocumentsApi {
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
getSlugsStaticDocumentPaths(): string[] {
|
getSlugsStaticDocumentPaths(): string[] {
|
||||||
if (this.options.prefix)
|
if (this.options.prefix)
|
||||||
return Object.keys(this.manifest).map(
|
return Object.keys(this.manifest).map(
|
||||||
@ -135,6 +192,7 @@ export class DocumentsApi {
|
|||||||
isDocumentIndex(document: DocumentMetadata): boolean {
|
isDocumentIndex(document: DocumentMetadata): boolean {
|
||||||
return !!document.itemList.length;
|
return !!document.itemList.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
generateDocumentIndexTemplate(document: DocumentMetadata): string {
|
generateDocumentIndexTemplate(document: DocumentMetadata): string {
|
||||||
const cardsTemplate = document.itemList
|
const cardsTemplate = document.itemList
|
||||||
.map((i) => ({
|
.map((i) => ({
|
||||||
@ -158,6 +216,7 @@ export class DocumentsApi {
|
|||||||
'{% /cards %}\n\n',
|
'{% /cards %}\n\n',
|
||||||
].join('');
|
].join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
getDocumentIndex(path: string[]): ProcessedDocument {
|
getDocumentIndex(path: string[]): ProcessedDocument {
|
||||||
const document: DocumentMetadata | null =
|
const document: DocumentMetadata | null =
|
||||||
this.manifest[this.getManifestKey(path.join('/'))] || null;
|
this.manifest[this.getManifestKey(path.join('/'))] || null;
|
||||||
|
|||||||
@ -39,6 +39,84 @@ export class PackagesApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.manifest = structuredClone(this.options.manifest);
|
this.manifest = structuredClone(this.options.manifest);
|
||||||
|
this.manifest['angular-rspack'] = this.getAngularRspackPackage();
|
||||||
|
this.manifest['angular-rsbuild'] = this.getAngularRsbuildPackage();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(colum): Remove this once we move angular rspack into main repo (when stable).
|
||||||
|
getAngularRspackPackage(): ProcessedPackageMetadata {
|
||||||
|
return {
|
||||||
|
path: '/nx-api/angular-rspack',
|
||||||
|
name: 'angular-rspack',
|
||||||
|
packageName: 'angular-rspack',
|
||||||
|
description: 'Angular Rspack',
|
||||||
|
githubRoot: 'https://github.com/nrwl/angular-rspack/blob/master',
|
||||||
|
root: 'packages/angular-rspack',
|
||||||
|
source: 'packages/angular-rspack/src',
|
||||||
|
executors: {},
|
||||||
|
generators: {},
|
||||||
|
migrations: {},
|
||||||
|
documents: {
|
||||||
|
'/nx-api/angular-rspack/documents/create-config': {
|
||||||
|
id: 'create-config',
|
||||||
|
name: 'createConfig',
|
||||||
|
description: 'createConfig for @nx/angular-rspack',
|
||||||
|
path: '/nx-api/angular-rspack/documents/create-config',
|
||||||
|
file: 'shared/guides/angular-rspack/api/nx-angular-rspack/create-config.md',
|
||||||
|
isExternal: false,
|
||||||
|
itemList: [],
|
||||||
|
tags: [],
|
||||||
|
},
|
||||||
|
'/nx-api/angular-rspack/documents/create-server': {
|
||||||
|
id: 'create-server',
|
||||||
|
name: 'createServer',
|
||||||
|
description: 'createServer for @nx/angular-rspack',
|
||||||
|
path: '/nx-api/angular-rspack/documents/create-server',
|
||||||
|
file: 'shared/guides/angular-rspack/api/nx-angular-rspack/create-server.md',
|
||||||
|
isExternal: false,
|
||||||
|
itemList: [],
|
||||||
|
tags: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(colum): Remove this once we move angular rspack into main repo (when stable).
|
||||||
|
getAngularRsbuildPackage(): ProcessedPackageMetadata {
|
||||||
|
return {
|
||||||
|
path: '/nx-api/angular-rsbuild',
|
||||||
|
name: 'angular-rsbuild',
|
||||||
|
packageName: 'angular-rsbuild',
|
||||||
|
description: 'Angular Rsbuild',
|
||||||
|
githubRoot: 'https://github.com/nrwl/angular-rspack/blob/master',
|
||||||
|
root: 'packages/angular-rsbuild',
|
||||||
|
source: 'packages/angular-rsbuild/src',
|
||||||
|
executors: {},
|
||||||
|
generators: {},
|
||||||
|
migrations: {},
|
||||||
|
documents: {
|
||||||
|
'/nx-api/angular-rsbuild/documents/create-config': {
|
||||||
|
id: 'create-config',
|
||||||
|
name: 'createConfig',
|
||||||
|
description: 'createConfig for @nx/angular-rsbuild',
|
||||||
|
path: '/nx-api/angular-rsbuild/documents/create-config',
|
||||||
|
file: 'shared/guides/angular-rspack/api/nx-angular-rsbuild/create-config.md',
|
||||||
|
isExternal: false,
|
||||||
|
itemList: [],
|
||||||
|
tags: [],
|
||||||
|
},
|
||||||
|
'/nx-api/angular-rsbuild/documents/create-server': {
|
||||||
|
id: 'create-server',
|
||||||
|
name: 'createServer',
|
||||||
|
description: 'createServer for @nx/angular-rsbuild',
|
||||||
|
path: '/nx-api/angular-rspack/documents/create-server',
|
||||||
|
file: 'shared/guides/angular-rspack/api/nx-angular-rsbuild/create-server.md',
|
||||||
|
isExternal: false,
|
||||||
|
itemList: [],
|
||||||
|
tags: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
getFilePath(path: string): string {
|
getFilePath(path: string): string {
|
||||||
@ -134,7 +212,6 @@ export class PackagesApi {
|
|||||||
experiment.migrations.push(generateSegments(path, this.options.prefix))
|
experiment.migrations.push(generateSegments(path, this.options.prefix))
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
return experiment;
|
return experiment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,12 +235,14 @@ export class PackagesApi {
|
|||||||
getPackageDocuments(name: string): Record<string, DocumentMetadata> {
|
getPackageDocuments(name: string): Record<string, DocumentMetadata> {
|
||||||
return this.manifest[name]['documents'];
|
return this.manifest[name]['documents'];
|
||||||
}
|
}
|
||||||
|
|
||||||
getPackageFileMetadatas(
|
getPackageFileMetadatas(
|
||||||
name: string,
|
name: string,
|
||||||
type: 'executors' | 'generators' | 'migrations'
|
type: 'executors' | 'generators' | 'migrations'
|
||||||
): Record<string, FileMetadata> {
|
): Record<string, FileMetadata> {
|
||||||
return this.manifest[name][type];
|
return this.manifest[name][type];
|
||||||
}
|
}
|
||||||
|
|
||||||
getSchemaMetadata(fileMetadata: FileMetadata): SchemaMetadata {
|
getSchemaMetadata(fileMetadata: FileMetadata): SchemaMetadata {
|
||||||
return JSON.parse(
|
return JSON.parse(
|
||||||
readFileSync(this.getFilePath(fileMetadata.file), 'utf-8')
|
readFileSync(this.getFilePath(fileMetadata.file), 'utf-8')
|
||||||
|
|||||||
@ -1,6 +1,73 @@
|
|||||||
'use client';
|
'use client';
|
||||||
import { Menu } from '@nx/nx-dev/models-menu';
|
import { Menu } from '@nx/nx-dev/models-menu';
|
||||||
import { Sidebar, SidebarMobile } from './sidebar';
|
import { Sidebar, SidebarMobile } from './sidebar';
|
||||||
|
import { useMemo } from 'react';
|
||||||
|
|
||||||
|
// TODO(colum): Remove this angular rspack modification once we move angular rspack into main repo (when stable).
|
||||||
|
const angularRspackSection = {
|
||||||
|
id: 'angular-rspack',
|
||||||
|
name: 'angular-rspack',
|
||||||
|
itemList: [
|
||||||
|
{
|
||||||
|
id: 'documents',
|
||||||
|
path: '/nx-api/angular-rspack/documents',
|
||||||
|
name: 'documents',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
name: 'createConfig',
|
||||||
|
path: '/nx-api/angular-rspack/documents/create-config',
|
||||||
|
id: 'create-config',
|
||||||
|
isExternal: false,
|
||||||
|
children: [],
|
||||||
|
disableCollapsible: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'createServer',
|
||||||
|
path: '/nx-api/angular-rspack/documents/create-server',
|
||||||
|
id: 'create-server',
|
||||||
|
isExternal: false,
|
||||||
|
children: [],
|
||||||
|
disableCollapsible: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
isExternal: false,
|
||||||
|
disableCollapsible: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
hideSectionHeader: false,
|
||||||
|
};
|
||||||
|
const angularRsbuildSection = {
|
||||||
|
id: 'angular-rsbuild',
|
||||||
|
name: 'angular-rsbuild',
|
||||||
|
itemList: [
|
||||||
|
{
|
||||||
|
id: 'documents',
|
||||||
|
path: '/nx-api/angular-rsbuild/documents',
|
||||||
|
name: 'documents',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
name: 'createConfig',
|
||||||
|
path: '/nx-api/angular-rsbuild/documents/create-config',
|
||||||
|
id: 'create-config',
|
||||||
|
isExternal: false,
|
||||||
|
children: [],
|
||||||
|
disableCollapsible: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'createServer',
|
||||||
|
path: '/nx-api/angular-rsbuild/documents/create-server',
|
||||||
|
id: 'create-server',
|
||||||
|
isExternal: false,
|
||||||
|
children: [],
|
||||||
|
disableCollapsible: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
isExternal: false,
|
||||||
|
disableCollapsible: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
hideSectionHeader: false,
|
||||||
|
};
|
||||||
|
|
||||||
export function SidebarContainer({
|
export function SidebarContainer({
|
||||||
menu,
|
menu,
|
||||||
@ -11,12 +78,31 @@ export function SidebarContainer({
|
|||||||
navIsOpen: boolean;
|
navIsOpen: boolean;
|
||||||
toggleNav: (value: boolean) => void;
|
toggleNav: (value: boolean) => void;
|
||||||
}): JSX.Element {
|
}): JSX.Element {
|
||||||
|
// TODO(colum): Remove this angular-rspack modification once we move angular rspack into main repo (when stable).
|
||||||
|
const menuWithAngularRspack = useMemo(() => {
|
||||||
|
const angularIdx = menu.sections.findIndex((s) => s.id === 'angular');
|
||||||
|
const sections = [
|
||||||
|
...menu.sections.slice(0, angularIdx),
|
||||||
|
angularRspackSection,
|
||||||
|
angularRsbuildSection,
|
||||||
|
...menu.sections.slice(angularIdx),
|
||||||
|
];
|
||||||
|
return {
|
||||||
|
...menu,
|
||||||
|
sections,
|
||||||
|
};
|
||||||
|
}, [menu]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div id="sidebar" data-testid="sidebar">
|
<div id="sidebar" data-testid="sidebar">
|
||||||
<SidebarMobile menu={menu} toggleNav={toggleNav} navIsOpen={navIsOpen} />
|
<SidebarMobile
|
||||||
|
menu={menuWithAngularRspack}
|
||||||
|
toggleNav={toggleNav}
|
||||||
|
navIsOpen={navIsOpen}
|
||||||
|
/>
|
||||||
<div className="hidden h-full w-72 flex-col border-r border-slate-200 md:flex dark:border-slate-700 dark:bg-slate-900">
|
<div className="hidden h-full w-72 flex-col border-r border-slate-200 md:flex dark:border-slate-700 dark:bg-slate-900">
|
||||||
<div className="relative flex flex-grow overflow-y-scroll p-4">
|
<div className="relative flex flex-grow overflow-y-scroll p-4">
|
||||||
<Sidebar menu={menu} />
|
<Sidebar menu={menuWithAngularRspack} />
|
||||||
</div>
|
</div>
|
||||||
{/*<div className="relative flex flex-col space-y-1 border-t border-slate-200 px-4 py-2 dark:border-slate-700">*/}
|
{/*<div className="relative flex flex-col space-y-1 border-t border-slate-200 px-4 py-2 dark:border-slate-700">*/}
|
||||||
{/* // another section.*/}
|
{/* // another section.*/}
|
||||||
|
|||||||
@ -13,12 +13,15 @@ import * as parseLinks from 'parse-markdown-links';
|
|||||||
function readFileContents(path: string): string {
|
function readFileContents(path: string): string {
|
||||||
return readFileSync(path, 'utf-8');
|
return readFileSync(path, 'utf-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
function isLinkInternal(linkPath: string): boolean {
|
function isLinkInternal(linkPath: string): boolean {
|
||||||
return linkPath.startsWith('/') || linkPath.startsWith('https://nx.dev');
|
return linkPath.startsWith('/') || linkPath.startsWith('https://nx.dev');
|
||||||
}
|
}
|
||||||
|
|
||||||
function isNotAsset(linkPath: string): boolean {
|
function isNotAsset(linkPath: string): boolean {
|
||||||
return !linkPath.startsWith('/assets');
|
return !linkPath.startsWith('/assets');
|
||||||
}
|
}
|
||||||
|
|
||||||
function isNotImage(linkPath: string): boolean {
|
function isNotImage(linkPath: string): boolean {
|
||||||
return (
|
return (
|
||||||
!linkPath.endsWith('.png') &&
|
!linkPath.endsWith('.png') &&
|
||||||
@ -30,9 +33,11 @@ function isNotImage(linkPath: string): boolean {
|
|||||||
!linkPath.endsWith('.avif')
|
!linkPath.endsWith('.avif')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeAnchors(linkPath: string): string {
|
function removeAnchors(linkPath: string): string {
|
||||||
return linkPath.split('#')[0];
|
return linkPath.split('#')[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
function extractAllLinks(basePath: string): Record<string, string[]> {
|
function extractAllLinks(basePath: string): Record<string, string[]> {
|
||||||
return glob.sync(`${basePath}/*/**/*.md`).reduce((acc, path) => {
|
return glob.sync(`${basePath}/*/**/*.md`).reduce((acc, path) => {
|
||||||
const fileContents = readFileContents(path);
|
const fileContents = readFileContents(path);
|
||||||
@ -51,6 +56,7 @@ function extractAllLinks(basePath: string): Record<string, string[]> {
|
|||||||
return acc;
|
return acc;
|
||||||
}, {});
|
}, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
function extractImageLinks(basePath: string): Record<string, string[]> {
|
function extractImageLinks(basePath: string): Record<string, string[]> {
|
||||||
return glob.sync(`${basePath}/**/*.md`).reduce((acc, path) => {
|
return glob.sync(`${basePath}/**/*.md`).reduce((acc, path) => {
|
||||||
const fileContents = readFileContents(path);
|
const fileContents = readFileContents(path);
|
||||||
@ -63,6 +69,7 @@ function extractImageLinks(basePath: string): Record<string, string[]> {
|
|||||||
return acc;
|
return acc;
|
||||||
}, {});
|
}, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
function readSiteMapIndex(directoryPath: string, filename: string): string[] {
|
function readSiteMapIndex(directoryPath: string, filename: string): string[] {
|
||||||
const parser = new XMLParser();
|
const parser = new XMLParser();
|
||||||
const sitemapIndex: {
|
const sitemapIndex: {
|
||||||
@ -79,6 +86,7 @@ function readSiteMapIndex(directoryPath: string, filename: string): string[] {
|
|||||||
),
|
),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
function readSiteMapLinks(filePath: string): string[] {
|
function readSiteMapLinks(filePath: string): string[] {
|
||||||
const parser = new XMLParser();
|
const parser = new XMLParser();
|
||||||
const sitemap: {
|
const sitemap: {
|
||||||
@ -100,6 +108,7 @@ const sitemapUrls = readSiteMapIndex(
|
|||||||
join(workspaceRoot, 'dist/nx-dev/nx-dev/public/'),
|
join(workspaceRoot, 'dist/nx-dev/nx-dev/public/'),
|
||||||
'sitemap.xml'
|
'sitemap.xml'
|
||||||
).flatMap((path) => readSiteMapLinks(path));
|
).flatMap((path) => readSiteMapLinks(path));
|
||||||
|
|
||||||
function headerToAnchor(line: string): string {
|
function headerToAnchor(line: string): string {
|
||||||
return line
|
return line
|
||||||
.replace(/[#]+ /, '')
|
.replace(/[#]+ /, '')
|
||||||
@ -156,6 +165,12 @@ const errors: Array<{ file: string; link: string }> = [];
|
|||||||
const localLinkErrors: Array<{ file: string; link: string }> = [];
|
const localLinkErrors: Array<{ file: string; link: string }> = [];
|
||||||
for (let file in documentLinks) {
|
for (let file in documentLinks) {
|
||||||
for (let link of documentLinks[file]) {
|
for (let link of documentLinks[file]) {
|
||||||
|
if (
|
||||||
|
link.includes('/nx-api/angular-rspack') ||
|
||||||
|
link.includes('/nx-api/angular-rsbuild')
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (link.startsWith('https://nx.dev')) {
|
if (link.startsWith('https://nx.dev')) {
|
||||||
localLinkErrors.push({ file, link });
|
localLinkErrors.push({ file, link });
|
||||||
} else if (
|
} else if (
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user