Framework-specific configuration and optimization for popular frontend frameworks and build tools.
@cypress/webpack-dev-server provides built-in support for major frontend frameworks with intelligent configuration detection and optimization.
type Frameworks = Extract<Cypress.DevServerConfigOptions, { bundler: 'webpack' }>['framework'];
type FrameworkConfig = {
framework?: Exclude<Frameworks, 'angular'>;
} | {
framework: 'angular';
options?: {
projectConfig: Cypress.AngularDevServerProjectConfig;
};
}Utility function to identify third-party framework definitions.
/**
* Checks if a framework string matches third-party definition patterns
* @param framework - Framework identifier string
* @returns true if framework is a third-party definition
*/
function isThirdPartyDefinition(framework: string): boolean;Third-party frameworks must follow naming conventions:
cypress-ct-* (e.g., cypress-ct-solid)@org/cypress-ct-* (e.g., @myorg/cypress-ct-lit)Usage Examples:
import { isThirdPartyDefinition } from '@cypress/webpack-dev-server';
console.log(isThirdPartyDefinition('react')); // false
console.log(isThirdPartyDefinition('cypress-ct-solid')); // true
console.log(isThirdPartyDefinition('@myorg/cypress-ct-lit')); // trueStandard React support with JSX transformation and hot module replacement.
Configuration:
// Automatic detection and configuration
{
framework: 'react'
}
// With custom webpack config
{
framework: 'react',
webpackConfig: {
resolve: {
alias: {
'@': path.resolve(__dirname, 'src')
}
}
}
}Features:
Vue Single File Component (SFC) support with full feature set.
Configuration:
{
framework: 'vue'
}Features:
.vue files)Svelte component compilation with preprocessing support.
Configuration:
{
framework: 'svelte'
}Features:
Advanced Next.js integration with specialized webpack configuration handling.
interface NextHandlerResult extends PresetHandlerResult {
frameworkConfig: Configuration;
sourceWebpackModulesResult: SourceRelativeWebpackResult;
}Configuration:
{
framework: 'next'
}Features:
Usage Example:
import { devServer } from '@cypress/webpack-dev-server';
export default defineConfig({
component: {
devServer(devServerConfig) {
return devServer({
...devServerConfig,
framework: 'next'
// Next.js config will be automatically detected from next.config.js
});
}
}
});Comprehensive Angular integration with CLI-based configuration support.
interface AngularWebpackDevServerConfig extends WebpackDevServerConfig {
framework: 'angular';
options?: {
projectConfig: Cypress.AngularDevServerProjectConfig;
};
}
interface AngularJsonProjectConfig {
projectType: string;
root: string;
sourceRoot: string;
architect: {
build: {
options: BuildOptions;
configurations?: {
[configuration: string]: BuildOptions;
};
};
};
}
type BuildOptions = Record<string, any>;Configuration:
{
framework: 'angular',
options: {
projectConfig: {
// Angular project configuration from angular.json
root: 'projects/my-app',
sourceRoot: 'projects/my-app/src',
// ... other Angular CLI options
}
}
}Features:
Usage Example:
import { devServer } from '@cypress/webpack-dev-server';
export default defineConfig({
component: {
devServer(devServerConfig) {
return devServer({
...devServerConfig,
framework: 'angular',
options: {
projectConfig: {
root: '.',
sourceRoot: 'src',
architect: {
build: {
options: {
main: 'src/main.ts',
tsConfig: 'tsconfig.app.json'
}
}
}
}
}
});
}
}
});Support for community-maintained framework integrations through a plugin system.
Naming Convention:
cypress-ct-{framework} (e.g., cypress-ct-solid, cypress-ct-lit)@{org}/cypress-ct-{framework} (e.g., @solidjs/cypress-ct-solid)Usage:
{
framework: 'cypress-ct-solid' // Will be detected as third-party
}Third-Party Framework Examples:
cypress-ct-solid: Solid.js supportcypress-ct-lit: Lit element supportcypress-ct-stencil: Stencil components@storybook/cypress-ct-storybook: Storybook integrationAll framework handlers return a standardized result structure:
interface PresetHandlerResult {
/** Framework-specific webpack configuration to be merged */
frameworkConfig: Configuration;
/** Sourced webpack modules from user's project */
sourceWebpackModulesResult: SourceRelativeWebpackResult;
}For advanced use cases, you can bypass framework handlers:
import { devServer } from '@cypress/webpack-dev-server';
export default defineConfig({
component: {
devServer(devServerConfig) {
return devServer({
...devServerConfig,
// No framework specified - uses default webpack config
webpackConfig: {
// Full custom webpack configuration
module: {
rules: [
// Custom loaders and rules
]
},
plugins: [
// Custom plugins
]
}
});
}
}
});Framework configurations are merged in the following priority order (highest to lowest):
This ensures that Cypress-specific requirements are never overridden while allowing maximum flexibility for user customization.