The Nx plugin for webpack brings smart task running and caching to a Webpack monorepo.
Webpack is a static module bundler for modern JavaScript applications. The @nx/webpack plugin provides executors that allow you to build and serve your projects using webpack, plus an executor for SSR.
You can customize your webpack configuration for your projects. Nx also provides a number of webpack plugins for supporting Nx and other frameworks.
Requirements
Section titled “Requirements”The @nx/webpack plugin supports the following package versions.
| Package | Supported Versions |
|---|---|
webpack | ^5.0.0 |
webpack-dev-server | ^5.0.0 |
webpack-cli | ^5.0.0 || ^6.0.0 || ^7.0.0 |
Nx generators install the latest supported versions automatically when scaffolding new projects.
Setting up a new Nx workspace with Webpack
Section titled “Setting up a new Nx workspace with Webpack”You can create a new workspace that uses Webpack with one of the following commands:
- Generate a new standalone React app set up with Webpack
npx create-nx-workspace@latest --preset=react-standalone --bundler=webpack- Generate a new React monorepo set up with Webpack
npx create-nx-workspace@latest --preset=react-monorepo --bundler=webpackInstallation
Section titled “Installation”In any Nx workspace, you can install @nx/webpack by running the following command:
nx add @nx/webpackThis will install the correct version of @nx/webpack.
How @nx/webpack infers tasks
Section titled “How @nx/webpack infers tasks”The @nx/webpack plugin will create a task for any project that has a Webpack configuration file present. Any of the following files will be recognized as a Webpack configuration file:
webpack.config.jswebpack.config.tswebpack.config.mjswebpack.config.cjs
The configuration directory must also contain a package.json or project.json.
View inferred tasks
Section titled “View inferred tasks”To view inferred tasks for a project, open the project details view in Nx Console or run nx show project my-project --web in the command line.
@nx/webpack configuration
Section titled “@nx/webpack configuration”The @nx/webpack/plugin is configured in the plugins array in nx.json.
{ "plugins": [ { "plugin": "@nx/webpack/plugin", "options": { "buildTargetName": "build", "previewTargetName": "preview", "serveTargetName": "serve", "serveStaticTargetName": "serve-static", "buildDepsTargetName": "build-deps", "watchDepsTargetName": "watch-deps" } } ]}| Option | Default | Inferred behavior |
|---|---|---|
buildTargetName | build | Runs and caches webpack-cli build with its configured outputs. |
serveTargetName | serve | Runs webpack-cli serve continuously in development mode. |
previewTargetName | preview | Runs webpack-cli serve continuously in production mode. |
serveStaticTargetName | serve-static | Serves the build output continuously after the build task. |
buildDepsTargetName | build-deps | Name of the dependency build task. |
watchDepsTargetName | watch-deps | Name of the dependency watch task. |
The build task depends on builds of project dependencies. When TypeScript project references are enabled, the tasks also run the TypeScript sync generator.
Use include and exclude glob patterns on the plugin entry to scope inference. A target defaults plugin filter must use the exact identifier @nx/webpack/plugin.
Generate a new project using Webpack
Section titled “Generate a new project using Webpack”You can generate a React application or a Web application that uses Webpack in an existing Nx workspace. The @nx/react:app, @nx/node:app and @nx/web:app generators accept the bundler option, where you can pass webpack. This will generate a new application configured to use Webpack, and it will also install all the necessary dependencies, including the @nx/webpack plugin.
To generate a React application using Webpack, run the following:
nx g @nx/react:app apps/my-app --bundler=webpackTo generate a Node application using Webpack, run the following:
nx g @nx/node:app apps/my-app --bundler=webpackTo generate a Web application using Webpack, run the following:
nx g @nx/web:app apps/my-app --bundler=webpackSet up CI for your Webpack monorepo
Section titled “Set up CI for your Webpack monorepo”In CI, Nx runs nx affected to rebuild and retest only the projects a change touches, and caches results to skip repeated work.
For a complete pipeline, see Set up CI.