Here you can find all environment APIs.
See Multi-environment builds for more details.
Environment context is a read-only object that provides context information about the current environment.
type EnvironmentContext = {
name: string;
browserslist: string[];
config: NormalizedEnvironmentConfig;
distPath: string;
entry: RsbuildEntry;
htmlPaths: Record<string, string>;
tsconfigPath?: string;
manifest?: Record<string, unknown> | ManifestData;
};
You can get the environment context in the following ways:
environment
or environments
parameter.environments.context
.The unique name of the current environment, used to distinguish and locate the environment. Corresponds to the key in the environments configuration.
string
api.modifyRspackConfig((config, { environment }) => {
if (environment.name === 'node') {
// modify config for node environment
}
return config;
});
The browserslist configuration of the current environment. See Browserslist for more details.
string[]
api.modifyRspackConfig((config, { environment }) => {
console.log(environment.browserslist);
return config;
});
The normalized Rsbuild config for the current environment.
type NormalizedEnvironmentConfig = DeepReadonly<{
dev: NormalizedDevConfig;
html: NormalizedHtmlConfig;
tools: NormalizedToolsConfig;
source: NormalizedSourceConfig;
server: NormalizedServerConfig;
output: NormalizedOutputConfig;
plugins?: RsbuildPlugins;
security: NormalizedSecurityConfig;
performance: NormalizedPerformanceConfig;
moduleFederation?: ModuleFederationConfig;
}>;
api.modifyRspackConfig((config, { environment }) => {
// Rspack config
console.log(config);
// Rsbuild config for current environment
console.log(environment.config);
return config;
});
The absolute path of the output directory, corresponding to the output.distPath.root config of Rsbuild.
string
api.modifyRspackConfig((config, { environment }) => {
console.log(environment.distPath);
return config;
});
The entry object from the source.entry option.
type RsbuildEntry = Record<string, string | string[] | EntryDescription>;
api.modifyRspackConfig((config, { environment }) => {
console.log(environment.entry);
return config;
});
The path information for all HTML assets.
This value is an object, the key is the entry name and the value is the relative path of the HTML file in the dist directory.
type htmlPaths = Record<string, string>;
api.modifyRspackConfig((config, { environment }) => {
console.log(environment.htmlPaths);
return config;
});
The absolute path of the tsconfig.json file, or undefined
if the tsconfig.json file does not exist in current project.
type TsconfigPath = string | undefined;
api.modifyRspackConfig((config, { environment }) => {
console.log(environment.tsconfigPath);
return config;
});
The manifest data. Only available when the output.manifest config is enabled.
Record<string, unknown> | ManifestData | undefined
api.onAfterBuild(({ environments }) => {
// Get the manifest data of web environment
console.log(environments.web.manifest);
});
api.onAfterDevCompile(({ environments }) => {
console.log(environments.web.manifest);
});
api.onAfterEnvironmentCompile(({ environment }) => {
console.log(environment.manifest);
});
The manifest data is only available after the build has completed, you can access it in the following hooks:
WebSocket authentication token, used to authenticate WebSocket connections and prevent unauthorized access.
Only available in development mode, and is an empty string in production mode.
string
When you need to establish a WebSocket connection with the Rsbuild dev server in the browser, you need to use this token as a query parameter.
const { webSocketToken } = environments.web.context;
const webSocketUrl = `ws://localhost:${port}${pathname}?token=${webSocketToken}`;
Environment API provides some APIs related to the multi-environment build.
You can use environment API via rsbuild.createDevServer() or dev.setupMiddlewares, which allows you to get the build outputs information for a specific environment in the server side.
type EnvironmentAPI = {
[name: string]: {
context: EnvironmentContext;
getStats: () => Promise<Stats>;
loadBundle: <T = unknown>(entryName: string) => Promise<T>;
getTransformedHtml: (entryName: string) => Promise<string>;
};
};
You can get context information related to the current environment through the Environment API.
const webManifest = environments.web.context.manifest;
console.log(webManifest.entries);
Get the build stats of current environment.
type GetStats = () => Promise<Stats>;
const webStats = await environments.web.getStats();
console.log(webStats.toJson({ all: false }));
Load and execute the bundles on the server side. This method returns the exports of the entry module.
/**
* @param entryName - Entry name, corresponding to a key in Rsbuild `source.entry`
* @returns The return value of the entry module
*/
type LoadBundle = <T = unknown>(entryName: string) => Promise<T>;
// Load the bundle of `main` entry
const result = await environments.node.loadBundle('main');
Get the HTML template content after compilation and transformation.
type GetTransformedHtml = (entryName: string) => Promise<string>;
// Get the HTML content of main entry
const html = await environments.web.getTransformedHtml('main');
This method returns the complete HTML string, including all resources and content injected through HTML plugins.