loading...

Extending Schematics in an Nx Plugin

devinshoemaker profile image Devin Shoemaker Updated on ・2 min read

Nx Plugins allow you to develop custom schematics for an Nx workspace, but maybe you just want to extend an existing set of schematics with some slight tweaks. Schematics feature this out of the box and it can be a good addition to your Nx Plugin.

For example, if your organization uses React and has a standard set of changes that are always made to new applications, but otherwise use the @nrwl/react schematics, you could extend the @nrwl/react schematics and customize only the application schematic. Any schematics other than the ones that have been overridden will fall back to the library that you have extended from.

Implementation

Add an extends property in your plugins collection.json that contains an array of libraries you are overriding schematics from. Here is an example from my @nxtend/ionic-react Nx Plugin that overrides @nrwl/react:

{
  "$schema": "../../node_modules/@angular-devkit/schematics/collection-schema.json",
  "name": "ionic-react",
  "version": "0.0.1",
  "extends": ["@nrwl/react"],
  "schematics": {
    "init": {
      "factory": "./src/schematics/init/schematic",
      "schema": "./src/schematics/init/schema.json",
      "description": "Initialize the @nxtend/ionic-react plugin",
      "aliases": ["ng-add"],
      "hidden": true
    },

    "application": {
      "factory": "./src/schematics/application/schematic",
      "schema": "./src/schematics/application/schema.json",
      "aliases": ["app"],
      "description": "Create an Ionic React application"
    }
  }
}

In the example above, I override both the init and application schematic, but otherwise, all other schematics will fall back to @nrwl/react. That means that nx g @nxtend/ionic-react:component will fall back to @nrwl/react:component since the component schematic was not overridden above.

You may have noticed that the field is an array. This means that you can extend multiple schematics schematics to provide a wide variety of fallback commands that fit your needs.

References

Nx Plugin Guide

Authoring Schematics by Angular

@nxtend/ionic-react

Posted on by:

devinshoemaker profile

Devin Shoemaker

@devinshoemaker

Full-stack developer, Nx Plugin author, streaming newbie

Discussion

markdown guide