website/docs/en/config/module-generator.mdx
import WebpackLicense from '@components/WebpackLicense';
<WebpackLicense from="https://webpack.docschina.org/configuration/module/" />module.generator controls how Rspack turns parsed modules into output code or emitted assets. It affects output-related behavior such as asset filenames, public paths, CSS Modules exports, and other generation settings for each module type.
Object{}Use module.generator to define output generation options for each module type.
Available generator option groups:
asset, asset/inline, asset/resource: Asset generator optionscss, css/auto, css/global, css/module: CSS generator optionsjson: JSON generator optionsexport default {
module: {
generator: {
// Generator options for asset modules
asset: {
dataUrl: {
encoding: false,
mimetype: 'image/png',
},
filename: '[name]-[contenthash][ext]',
publicPath: 'https://cdn.example.com/',
},
// Generator options for asset/inline modules
'asset/inline': {
dataUrl: {
encoding: false,
mimetype: 'image/png',
},
},
// Generator options for asset/resource modules
'asset/resource': {
filename: '[name]-[contenthash][ext]',
publicPath: 'https://cdn.example.com/',
},
// Generator options for css/auto modules
'css/auto': {
exportsConvention: 'as-is',
exportsOnly: false,
localIdentHashDigest: 'base64url',
localIdentHashDigestLength: 6,
localIdentHashFunction: 'xxhash64',
localIdentHashSalt: 'my-salt',
localIdentName: '[uniqueName]-[id]-[local]',
esModule: true,
},
// Generator options for `css` modules
css: {
exportsOnly: false,
esModule: true,
},
// Generator options for css/global modules
'css/global': {
exportsConvention: 'as-is',
exportsOnly: false,
localIdentHashDigest: 'base64url',
localIdentHashDigestLength: 6,
localIdentHashFunction: 'xxhash64',
localIdentHashSalt: 'my-salt',
localIdentName: '[uniqueName]-[id]-[local]',
esModule: true,
},
// Generator options for css/module modules
'css/module': {
exportsConvention: 'as-is',
exportsOnly: false,
localIdentHashDigest: 'base64url',
localIdentHashDigestLength: 6,
localIdentHashFunction: 'xxhash64',
localIdentHashSalt: 'my-salt',
localIdentName: '[uniqueName]-[id]-[local]',
esModule: true,
},
// Generator options for `json` modules
json: {
JSONParse: true,
},
},
},
};
Generator options for asset modules.
export default {
module: {
generator: {
asset: {
// options
},
},
},
};
boolean | undefinedundefinedWhether or not this asset module should be considered binary. This can be set to false to treat this asset module as text.
If not set, the module type will be used to determine if the module is binary.
export default {
module: {
generator: {
asset: {
binary: false,
},
},
},
};
Object | (source: Buffer, context: { filename: string, module: Module }) => string{}Only for modules with module type 'asset' or 'asset/inline'.
export default {
module: {
generator: {
asset: {
dataUrl: {
encoding: 'base64',
mimetype: 'image/png',
},
},
},
},
};
When used as a function, it executes for every module and must return a data URI string.
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
export default {
module: {
generator: {
asset: {
dataUrl: ({ content }) => {
const svgToMiniDataURI = require('mini-svg-data-uri');
return svgToMiniDataURI(content);
},
},
},
},
};
false | 'base64''base64'When set to 'base64', module source will be encoded using Base64 algorithm. Setting encoding to false will disable encoding. Only for modules with module type 'asset' or 'asset/inline'.
export default {
module: {
generator: {
asset: {
dataUrl: {
encoding: false,
},
},
},
},
};
stringrequire('mime-types').lookup(ext)A mimetype for data URI. Resolves from module resource extension by default. Only for modules with module type 'asset' or 'asset/inline'.
export default {
module: {
generator: {
asset: {
dataUrl: {
mimetype: 'image/png',
},
},
},
},
};
'url' | 'preserve''url'If "url", a URL pointing to the asset will be generated based on publicPath.
If "preserve", preserve import/require statement from generated asset.
Only for modules with module type 'asset' or 'asset/resource'.
'asset':export default {
module: {
generator: {
asset: {
importMode: 'preserve',
},
},
},
};
'asset/resource':export default {
module: {
generator: {
'asset/resource': {
importMode: 'preserve',
},
},
},
};
string | ((pathData: PathData, assetInfo?: AssetInfo) => string)undefinedoutput.assetModuleFilenameSame as output.assetModuleFilename. Overrides output.assetModuleFilename and only works for asset and asset/resource module types.
export default {
module: {
generator: {
asset: {
filename: 'static/[hash][ext]',
},
},
},
};
string | ((pathData: PathData, assetInfo?: AssetInfo) => string)undefinedEmit the asset in the specified folder relative to output.path.
Only for modules with module type 'asset' or 'asset/resource'.
export default {
module: {
generator: {
asset: {
outputPath: 'foo/',
},
},
},
};
string | ((pathData: PathData, assetInfo?: AssetInfo) => string)undefinedOverride output.publicPath, only for modules with module type 'asset' or 'asset/resource'.
export default {
module: {
generator: {
asset: {
publicPath: 'https://cdn.example.com/',
},
},
},
};
booleantrueWhether to output assets to disk. You can set this option to false to avoid outputting unnecessary files for some scenarios such as SSR.
Only for modules with module type 'asset' or 'asset/resource'.
'asset':export default {
module: {
generator: {
asset: {
emit: false,
},
},
},
};
'asset/resource':export default {
module: {
generator: {
'asset/resource': {
emit: false,
},
},
},
};
Generator options for asset/inline modules.
export default {
module: {
generator: {
'asset/inline': {
// options
},
},
},
};
Same as module.generator["asset"].binary.
export default {
module: {
generator: {
'asset/inline': {
binary: false,
},
},
},
};
Same as module.generator["asset"].dataUrl.
export default {
module: {
generator: {
'asset/inline': {
dataUrl: {
// options
},
},
},
},
};
Same as module.generator["asset"].dataUrl.encoding.
export default {
module: {
generator: {
'asset/inline': {
dataUrl: {
encoding: false,
},
},
},
},
};
Same as module.generator["asset"].dataUrl.mimetype.
export default {
module: {
generator: {
'asset/inline': {
dataUrl: {
mimetype: 'image/png',
},
},
},
},
};
Generator options for asset/resource modules.
export default {
module: {
generator: {
'asset/resource': {
// options
},
},
},
};
Same as module.generator["asset"].binary.
export default {
module: {
generator: {
'asset/resource': {
binary: false,
},
},
},
};
Same as module.generator["asset"].importMode.
export default {
module: {
generator: {
'asset/resource': {
importMode: 'preserve',
},
},
},
};
Same as module.generator["asset"].filename.
export default {
module: {
generator: {
'asset/resource': {
filename: 'static/[hash][ext]',
},
},
},
};
Same as module.generator["asset"].outputPath.
export default {
module: {
generator: {
'asset/resource': {
outputPath: 'foo/',
},
},
},
};
Same as module.generator["asset"].publicPath.
export default {
module: {
generator: {
'asset/resource': {
publicPath: 'https://cdn.example.com/',
},
},
},
};
Generator options for css/auto modules.
export default {
module: {
generator: {
'css/auto': {
// options
},
},
},
};
'as-is' | 'camel-case' | 'camel-case-only' | 'dashes' | 'dashes-only''as-is'Customize how CSS export names are exported to javascript modules, such as keeping them as is, transforming them to camel case, etc.
export default {
module: {
generator: {
'css/auto': {
exportsConvention: 'camel-case',
},
},
},
};
booleantrue when the target has no document support, otherwise false.If true, only exports the identifier mappings from CSS into the output JavaScript files, without embedding any stylesheets in the template. Useful if you are using CSS Modules for pre-rendering (e.g. SSR).
If false, generate stylesheets and embed them in the template.
export default {
module: {
generator: {
'css/auto': {
exportsOnly: false,
},
},
},
};
string[uniqueName]-[id]-[local] in development mode when output.uniqueName is non-empty, [id]-[local] in development mode otherwise, and [fullhash] in production mode.Customize the format of the local class names generated for CSS modules, besides the substitutions at File-level and Module-level, also include [uniqueName] and [local].
export default {
module: {
generator: {
'css/auto': {
localIdentName: '[local]-[hash:base64:6]',
},
},
},
};
string'base64url'Configure the digest encoding used for hashes in generated CSS Modules local identifiers. This has the same supported values as output.hashDigest.
export default {
module: {
generator: {
'css/auto': {
localIdentHashDigest: 'hex',
},
},
},
};
number6Configure how many characters from the hash are used in generated CSS Modules local identifiers.
export default {
module: {
generator: {
'css/auto': {
localIdentHashDigestLength: 8,
},
},
},
};
stringoutput.hashFunction, which defaults to 'xxhash64'Configure the hash function used for generated CSS Modules local identifiers. This has the same supported values as output.hashFunction.
export default {
module: {
generator: {
'css/auto': {
localIdentHashFunction: 'xxhash64',
},
},
},
};
stringoutput.hashSalt, which defaults to undefinedConfigure a salt added to the hash used for generated CSS Modules local identifiers. When unset, Rspack uses output.hashSalt.
export default {
module: {
generator: {
'css/auto': {
localIdentHashSalt: 'my-salt',
},
},
},
};
booleantrueThis configuration is available for improved ESM-CJS interoperability purposes.
Whether to add __esModule to the exports of CSS; if added, it will be treated as ES modules during ESM-CJS interop, otherwise, it will be treated as a CommonJS Module.
export default {
module: {
generator: {
'css/auto': {
esModule: true,
},
},
},
};
For example, a common use case, when using the CommonJS output from a third-party component library, it is sometimes necessary to add this configuration to ensure correct ESM-CJS interop, to obtain the correct exports (this can be used in conjunction with rules[].test and other matching conditions to add it only for that particular component library).
The original source code of the third-party component library:
import style from './style.css';
export function Button() {
return <button className={style.btn}></button>;
}
The CommonJS format output published by the third-party component library:
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true,
});
exports.Button = Button;
var _style = _interopRequireDefault(require('./style.css'));
var _jsxRuntime = require('react/jsx-runtime');
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}
function Button() {
return /*#__PURE__*/ (0, _jsxRuntime.jsx)('button', {
className: _style['default'].btn, // <-- Note: After passing through _interopRequireDefault, this need to access default here.
});
}
Generator options for css modules.
export default {
module: {
generator: {
css: {
// options
},
},
},
};
Same as module.generator["css/auto"].exportsOnly.
export default {
module: {
generator: {
css: {
exportsOnly: false,
},
},
},
};
Same as module.generator["css/auto"].esModule.
export default {
module: {
generator: {
css: {
esModule: true,
},
},
},
};
Generator options for css/global modules.
export default {
module: {
generator: {
'css/global': {
// options
},
},
},
};
Same as module.generator["css/auto"].exportsConvention.
export default {
module: {
generator: {
'css/global': {
exportsConvention: 'camel-case',
},
},
},
};
Same as module.generator["css/auto"].exportsOnly.
export default {
module: {
generator: {
'css/global': {
exportsOnly: false,
},
},
},
};
Same as module.generator["css/auto"].localIdentName.
export default {
module: {
generator: {
'css/global': {
localIdentName: '[local]-[hash:base64:6]',
},
},
},
};
Same as module.generator["css/auto"].localIdentHashDigest.
export default {
module: {
generator: {
'css/global': {
localIdentHashDigest: 'hex',
},
},
},
};
Same as module.generator["css/auto"].localIdentHashDigestLength.
export default {
module: {
generator: {
'css/global': {
localIdentHashDigestLength: 8,
},
},
},
};
Same as module.generator["css/auto"].localIdentHashFunction.
export default {
module: {
generator: {
'css/global': {
localIdentHashFunction: 'xxhash64',
},
},
},
};
Same as module.generator["css/auto"].localIdentHashSalt.
export default {
module: {
generator: {
'css/global': {
localIdentHashSalt: 'my-salt',
},
},
},
};
Same as module.generator["css/auto"].esModule.
export default {
module: {
generator: {
'css/global': {
esModule: true,
},
},
},
};
Generator options for css/module modules.
export default {
module: {
generator: {
'css/module': {
// options
},
},
},
};
Same as module.generator["css/auto"].exportsConvention.
export default {
module: {
generator: {
'css/module': {
exportsConvention: 'camel-case',
},
},
},
};
Same as module.generator["css/auto"].exportsOnly.
export default {
module: {
generator: {
'css/module': {
exportsOnly: false,
},
},
},
};
Same as module.generator["css/auto"].localIdentName.
export default {
module: {
generator: {
'css/module': {
localIdentName: '[local]-[hash:base64:6]',
},
},
},
};
Same as module.generator["css/auto"].localIdentHashDigest.
export default {
module: {
generator: {
'css/module': {
localIdentHashDigest: 'hex',
},
},
},
};
Same as module.generator["css/auto"].localIdentHashDigestLength.
export default {
module: {
generator: {
'css/module': {
localIdentHashDigestLength: 8,
},
},
},
};
Same as module.generator["css/auto"].localIdentHashFunction.
export default {
module: {
generator: {
'css/module': {
localIdentHashFunction: 'xxhash64',
},
},
},
};
Same as module.generator["css/auto"].localIdentHashSalt.
export default {
module: {
generator: {
'css/module': {
localIdentHashSalt: 'my-salt',
},
},
},
};
Same as module.generator["css/auto"].esModule.
export default {
module: {
generator: {
'css/module': {
esModule: true,
},
},
},
};
booleantrueUse JSON.parse when the JSON string is longer than 20 characters.
export default {
module: {
generator: {
json: {
JSONParse: false,
},
},
},
};