К основному содержанию
правило

webpack — правило для Cursor: что делает и как установить

Правило подсказывает Cursor, как организовать webpack-конфигурацию и настроить сборку. Пригодится при работе с JavaScript-проектом, где нужны отдельные настройки для разработки и production.

Установить в Cursor · Вручную: положить файлы Все способы и платформы ↓
.cursor/rules/webpack.mdc
Открыть на GitHub

Что делает webpack

Правило охватывает структуру конфигурации, кэширование, область действия загрузчиков и разделение кода. Оно советует держать общие настройки отдельно от webpack.dev.js и webpack.prod.js, а загрузчики применять к исходникам проекта, а не ко всему node_modules.

Также описаны HtmlWebpackPlugin, DefinePlugin и output.clean: первый добавляет собранные бандлы в HTML-шаблон, второй передаёт пользовательские переменные на этапе сборки, а третий очищает папку вывода. Для раздельных конфигураций в примерах используется webpack-merge; без этой зависимости примеры придётся адаптировать.

Правило рассчитано на файлы js и jsx. Оно предлагает динамические импорты и splitChunks для разбиения бандла, а также файловый кэш для повторных сборок. Параметры сборки всё равно нужно сверить с устройством конкретного проекта.

Какие задачи решает

  • разнести настройки webpack для разработки и production
  • ограничить работу Babel исходными файлами проекта
  • разделить большой бандл на загружаемые части
  • автоматически подключать собранные файлы к HTML-шаблону
  • очищать папку вывода от старых файлов

Примеры запросов агенту

  • Раздели конфигурацию webpack на общую, dev и production для моего проекта.
  • Проверь, чтобы Babel обрабатывал исходники, а не node_modules.
  • Предложи настройку splitChunks и динамических импортов для крупных модулей.

Как установить webpack

Вручную: положить файлы

.cursor/rules/webpack.mdc

Во frontmatter: description, globs, alwaysApply

По шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules

Вопросы о webpack

Как установить правило webpack в Cursor?

Сохраните файл правила по пути .cursor/rules/webpack.mdc.

Что делает правило webpack?

Оно задаёт рекомендации по конфигурации webpack, кэшированию, загрузчикам, плагинам и разделению кода.

Какие файлы охватывает правило?

Правило применяется к файлам с расширениями js и jsx.

Исходный текст

webpack.mdc · CC0-1.0
---
description: This guide provides opinionated, actionable best practices for configuring webpack, focusing on performance, maintainability, and modern development workflows in 2025.
globs: **/*.{js,jsx}
---
# webpack Best Practices

webpack remains the cornerstone of modern JavaScript application builds. Adhering to these definitive guidelines ensures your projects are performant, maintainable, and aligned with current best practices.

## 1. Configuration Structure

Always separate your webpack configurations by environment. Use `webpack-merge` to combine a common base with environment-specific overrides.

❌ BAD: Monolithic `webpack.config.js` with conditional logic.
```javascript
// webpack.config.js
const isProduction = process.env.NODE_ENV === 'production';

module.exports = {
  mode: isProduction ? 'production' : 'development',
  // ... lots of if/else logic
};
```

✅ GOOD: Modular configs with `webpack-merge`.
```javascript
// webpack.common.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    clean: true, // Always clean dist folder
  },
  plugins: [
    new HtmlWebpackPlugin({ template: './src/index.html' }),
  ],
  module: {
    rules: [
      {
        test: /\.js$/,
        include: path.resolve(__dirname, 'src'), // Target only your source
        loader: 'babel-loader',
      },
    ],
  },
};

// webpack.dev.js
const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');

module.exports = merge(common, {
  mode: 'development',
  devtool: 'eval-cheap-module-source-map', // Fast source maps for dev
  output: {
    filename: '[name].bundle.js',
  },
  devServer: {
    static: './dist',
    hot: true, // Enable HMR
  },
});

// webpack.prod.js
const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // For production CSS

module.exports = merge(common, {
  mode: 'production',
  devtool: 'source-map', // High-quality source maps for production debugging
  output: {
    filename: '[name].[contenthash].bundle.js', // Cache busting
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: '[name].[contenthash].css',
    }),
  ],
  optimization: {
    minimize: true, // Enable minification
    splitChunks: {
      chunks: 'all', // Aggressively split chunks
    },
  },
});
```

## 2. Performance Optimizations

Prioritize build speed and bundle size from the start.

### A. Caching

Enable persistent caching for faster incremental builds.

❌ BAD: No caching, slow rebuilds.
```javascript
module.exports = { /* ... */ };
```

✅ GOOD: Filesystem caching.
```javascript
module.exports = {
  cache: {
    type: 'filesystem',
    buildDependencies: {
      config: [__filename], // Invalidate cache if config changes
    },
  },
  // ...
};
```

### B. Loaders Scope

Apply loaders to the absolute minimum set of files. Exclude `node_modules` where possible.

❌ BAD: Applying Babel to `node_modules`.
```javascript
module.exports = {
  module: {
    rules: [{ test: /\.js$/, loader: 'babel-loader' }],
  },
};
```

✅ GOOD: Explicitly `include` your source, `exclude` `node_modules`.
```javascript
const path = require('path');
module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        include: path.resolve(__dirname, 'src'),
        exclude: /node_modules/, // Crucial for performance
        loader: 'babel-loader',
      },
    ],
  },
};
```

### C. Code Splitting

Leverage `optimization.splitChunks` and dynamic `import()` for smaller, on-demand bundles.

❌ BAD: Single large bundle for the entire application.
```javascript
// src/index.js
import { largeModuleA } from './largeModuleA';
import { largeModuleB } from './largeModuleB';
// ...
```

✅ GOOD: Dynamic imports with `splitChunks`.
```javascript
// webpack.prod.js (part of optimization)
module.exports = {
  optimization: {
    splitChunks: {
      chunks: 'all', // Automatically split vendor and common code
      minSize: 20000, // Minimum size for a chunk to be generated
      maxInitialRequests: 30, // Max number of parallel requests on initial load
      maxAsyncRequests: 30, // Max number of parallel requests for on-demand loading
      cacheGroups: {
        vendors: {
          test: /[\\/]node_modules[\\/]/,
          name: 'vendors',
          priority: -10,
          reuseExistingChunk: true,
        },
        default: {
          minChunks: 2,
          priority: -20,
          reuseExistingChunk: true,
        },
      },
    },
    runtimeChunk: 'single', // Separate runtime manifest
  },
  // ...
};

// src/index.js
const loadLargeModuleA = () => import('./largeModuleA'); // Dynamic import
const loadLargeModuleB = () => import('./largeModuleB');
// ... use them when needed, e.g., on button click
```

## 3. Essential Plugins

Use these plugins for robust and optimized builds.

### A. `HtmlWebpackPlugin`

Always generate your `index.html` and inject bundles automatically.

❌ BAD: Manually updating `<script>` tags in `index.html`.
```html
<!-- index.html -->
<script src="./dist/main.bundle.js"></script>
```

✅ GOOD: Let `HtmlWebpackPlugin` handle it.
```javascript
// webpack.common.js
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
  plugins: [
    new HtmlWebpackPlugin({
      template: './public/index.html', // Your template HTML
      title: 'My App',
    }),
  ],
  // ...
};
```

### B. `DefinePlugin`

Inject environment variables safely and enable dead-code elimination. `mode` handles `process.env.NODE_ENV` automatically. For custom variables, use `DefinePlugin`.

❌ BAD: Hardcoding API keys or relying on client-side `process.env`.
```javascript
// src/api.js
const API_URL = 'https://dev.api.example.com'; // Changes for prod
```

✅ GOOD: Injecting via `DefinePlugin`.
```javascript
// webpack.common.js
const webpack = require('webpack');
module.exports = {
  plugins: [
    new webpack.DefinePlugin({
      'process.env.API_URL': JSON.stringify(process.env.API_URL || 'http://localhost:3000/api'),
    }),
  ],
  // ...
};

// src/api.js
const API_URL = process.env.API_URL; // Injected at build time
```

## 4. Modern Tooling & Maintenance

Stay current with webpack and Node.js versions.

### A. Keep Dependencies Updated

Regularly update `webpack`, `webpack-cli`, `webpack-dev-server`, and Node.js for performance gains and security fixes.

### B. `output.clean`

Always use `output.clean: true` to prevent stale files in your `dist` directory.

❌ BAD: Manually deleting `dist` or having old files linger.
```javascript
// package.json
"scripts": {
  "build": "rm -rf dist && webpack --config webpack.prod.js"
}
```

✅ GOOD: Built-in `clean` option.
```javascript
// webpack.common.js
module.exports = {
  output: {
    clean: true, // Automatically cleans the output directory before emit
    // ...
  },
  // ...
};
```

© sanjeed5 · CC0-1.0 · sanjeed5/awesome-cursor-rules-mdc

Похожие правила IDE

Все правила IDE по теме «Фронтенд и UI» →
react-performance-optimizer davila7 Субагент находит узкие места в рендеринге React, настраивает виртуализацию списков и помогает урезать размер бандла. Пригодится при просадках FPS и плохих метриках Core Web Vitals. 2 081установок optimize-bundle-size davila7 Анализирует и уменьшает размер фронтенд-сборки через настройку бандлера, код-сплиттинг и удаление мёртвого кода. Пригодится при росте веса JS-бандла и падении скорости загрузки страниц. 535установок winui3 официальный github Правило задаёт рекомендации для WinUI 3 и Windows App SDK: от XAML и потоков до окон и MVVM. Пригодится, чтобы Copilot учитывал особенности настольных приложений Windows. ★ 40 478звёзд репо vue официальный github Правило задаёт Copilot стандарты Vue 3: Composition API, <script setup>, реактивность, Pinia и Vue Router. Пригодится, когда агент пишет компоненты в вашем стиле. ★ 40 478звёзд репо tanstack-start-shadcn-tailwind официальный github Правило задаёт Copilot стек TanStack Start, Shadcn/ui и Tailwind CSS и требует валидировать внешние данные через Zod. ★ 40 478звёзд репо tailwind-v4-vite официальный github Правило помогает подключить Tailwind CSS v4 к проекту на Vite через официальный плагин. Пригодится и для новой установки, и при переходе с v3. ★ 40 478звёзд репо svelte официальный github Направляет GitHub Copilot на стандарты Svelte 5 и SvelteKit 2: руны вместо старых сторов, типизация компонентов и безопасная работа с SSR. ★ 40 478звёзд репо power-bi-custom-visuals-development официальный github Правило для GitHub Copilot, которое подсказывает агенту, как писать кастомные визуалы Power BI на React, D3.js и TypeScript. ★ 40 478звёзд репо

Из того же набора240

Весь набор →
zustand Задаёт правила архитектуры хранилищ Zustand в React: типизацию стейта, деление на слайсы, селекторы и защиту от устаревших замыканий. ★ 3 580звёзд репо zsh Правило задаёт единый стиль для Zsh-скриптов и конфигурации в Cursor. Оно пригодится для проверок, читаемости и безопасной работы с оболочкой. ★ 3 580звёзд репо zod Правило для Cursor задаёт стандарты работы с Zod: строгий режим TypeScript, вывод типов из схем и проверка данных на входе. ★ 3 580звёзд репо xgboost Задаёт стандарты работы с библиотекой xgboost в Python: однократную сборку DMatrix, выбор tree_method='hist' и оформление докстрингов по стилю NumPy. ★ 3 580звёзд репо vue3 Правило задаёт агенту Cursor единый стиль для Vue 3: Composition API, TypeScript, ESLint и Prettier. Пригодится, если в проекте несколько разработчиков и код должен выглядеть одинаково. ★ 3 580звёзд репо vllm Правило задаёт рекомендации для Python-кода с vLLM: настройка окружения, организация инференса, производительность и наблюдаемость. Пригодится при разработке сервиса генерации на GPU. ★ 3 580звёзд репо vitest Правило задаёт Cursor, как писать юнит- и интеграционные тесты на Vitest: где держать файлы, как изолировать кейсы и мокать модули. ★ 3 580звёзд репо vite Задаёт стандарты проектов на Vite: требует чистый конфиг, прямой импорт модулей без barrel-файлов и использование import.meta.env. ★ 3 580звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой