Skip to content

The JS plugin contains executors and generators that are useful for JavaScript/TypeScript projects in an Nx workspace.

In any Nx workspace, you can install @nx/js by running the following command:

nx add @nx/js

This will install the correct version of @nx/js.

When initializing a new Nx workspace, specifying --preset=ts will generate a workspace with @nx/js pre-installed.

npx create-nx-workspace my-org --preset=ts

The @nx/js/typescript plugin will add a typecheck task to projects that have a tsconfig.json.

This plugin adds a build task for projects that:

  1. Have a runtime tsconfig file (defaults to tsconfig.lib.json).
  2. Have a package.json file containing entry points that are not source files.

For example, this project is buildable and will have a build task.

packages/pkg1/package.json
{
"name": "@acme/pkg1",
"exports": {
"./package.json": "./package.json",
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
}
}

Whereas this project points to source files and will not have a build task.

packages/pkg1/package.json
{
"name": "@acme/pkg1",
"exports": {
"./package.json": "./package.json",
".": "./src/index.ts"
}
}

To view inferred tasks for a project, open the project details view in Nx Console or run nx show project my-project in the command line.

The @nx/js/typescript plugin is configured in the plugins array in nx.json.

nx.json
{
"plugins": [
{
"plugin": "@nx/js/typescript",
"options": {
"typecheck": {
"targetName": "typecheck"
},
"build": {
"targetName": "build",
"configName": "tsconfig.lib.json"
}
}
}
]
}

You can also set typecheck and build options to false to not infer the corresponding tasks.

nx.json
{
"plugins": [
{
"plugin": "@nx/js/typescript",
"options": {
"build": false
}
}
]
}

To disable typecheck task for a specific project, set the nx.addTypecheckTarget property to false in tsconfig.json.

packages/pkg1/tsconfig.json
{
"extends": "../../tsconfig.base.json",
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
}
],
"nx": {
"addTypecheckTarget": false
}
}

You can add a new JS/TS library with the following command:

nx g @nx/js:lib libs/my-lib

You can build libraries that are generated with a bundler specified.

nx g @nx/js:lib libs/my-buildable-lib --bundler=rollup

Generating a library with --bundler specified will add a build target to the library's project.json file allows the library to be built.

nx build my-buildable-lib

You can test a library with the following command:

nx test my-lib

You can lint a library with the following command:

nx lint my-lib

By default, @nx/js uses TypeScript Compiler (TSC), via @nx/js:tsc executor, to compile your libraries. Optionally, you can switch tsc out for a different compiler with --compiler flag when executing the generators.

Currently, @nx/js supports the following compilers:

  • Create a buildable library with swc
nx g @nx/js:lib libs/my-swc-lib --bundler=swc
  • Convert a tsc library to use swc
nx g @nx/js:convert-to-swc my-buildable-lib

Now the build command will use @nx/js:swc executor to compile your libraries.

The first time you generate a swc library or convert a tsc library over to swc, @nx/js will install the necessary dependencies to use swc.