Customizing Webpack Config
For most apps, the default configuration of webpack is sufficient, but sometimes you need to tweak a setting in your webpack config. This guide explains how to make a small change without taking on the maintenance burden of the entire webpack config.
AngularFor Angular developers, use an executor like ngx-build-plus
.
In your project.json
configuration for the @nrwl/web:webpack
or @nrwl/node:webpack
executor, set the webpackConfig
option to point to your custom webpack config file. i.e. apps/my-app/custom-webpack.config.js
The custom webpack file contains a function that takes as input the existing webpack config and then returns a modified config object. context
includes all the options specified for the executor.
apps/my-app/custom-webpack.config.js
:
1// Helper for combining webpack config objects
2const { merge } = require('webpack-merge');
3
4module.exports = (config, context) => {
5 return merge(config, {
6 // overwrite values here
7 });
8};
9
Also supports async functions
1// Utility function for sleeping
2const sleep = (n) => new Promise((resolve) => setTimeout(resolve, n));
3
4module.exports = async (config, context) => {
5 await sleep(10);
6 return merge(config, {
7 // overwrite values here
8 });
9};
10
Add a Loader
To add the css-loader
to your config, install it and add the rule.
npm install -save-dev css-loader
1const { merge } = require('webpack-merge');
2
3module.exports = (config, context) => {
4 return merge(config, {
5 module: {
6 rules: [
7 {
8 test: /\.css$/i,
9 use: ['style-loader', 'css-loader'],
10 },
11 ],
12 },
13 });
14};
15
Module Federation
If you use the Module Federation support from @nrwl/angular
or @nrwl/react
then you can customize your webpack configuration as follows.
1const { merge } = require('webpack-merge');
2const withModuleFederation = require('@nrwl/react/module-federation');
3// or `const withModuleFederation = require('@nrwl/angular/module-federation');`
4
5module.exports = async (config, context) => {
6 const federatedModules = await withModuleFederation({
7 // your options here
8 });
9
10 return merge(federatedModules(config, context), {
11 // overwrite values here
12 });
13};
14
Reference the webpack documentation for details on the structure of the webpack config object.
Next.js Applications
Next.js supports webpack customization in the next.config.js
file.
1const { withNx } = require('@nrwl/next/plugins/with-nx');
2
3const nextConfig = {
4 webpack: (
5 config,
6 { buildId, dev, isServer, defaultLoaders, nextRuntime, webpack }
7 ) => {
8 // Important: return the modified config
9 return config;
10 },
11};
12
13return withNx(nextConfig);
14
Read the official documentation for more details.
Related Documentation
Concepts
Recipes
- Running Custom Commands
- Use Executor Configurations
- Local Executors
- Compose Executors
- Profiling Build Performance
- Faster Builds with Module Federation