npm package: @prizm-ui/nx-mv
Description: Этот Nx генератор предназначен для обновления файлов проектов в рабочем пространстве на основе заданной конфигурации и схемы. Он позволяет автоматизировать процесс замены и модификации файлов в проектах.
Latest version: 5.9.0

# @prizm-ui/nx-mv:apply

Этот Nx генератор предназначен для обновления файлов проектов в рабочем пространстве на основе заданной конфигурации и схемы. Он позволяет автоматизировать процесс замены и модификации файлов в проектах.

## Установка

Перед использованием генератора необходимо установить его в ваше рабочее пространство Nx. Добавьте его в зависимости вашего проекта:

```bash
npm install @prizm-ui/nx-mv --save-dev
```

## Использование

Генератор запускается с помощью команды `nx` и требует указания схемы и конфигурационного файла.

### Команда для запуска

```bash
nx generate @prizm-ui/nx-mv:apply --name=<project-name> --config=<config-file> [--var<VariableName>=<value>...]
```

### Параметры

- `--name` (обязательно): Имя проекта, для которого будет применяться обновление.
- `--config` (обязательно): Путь к конфигурационному файлу, описывающему, какие изменения необходимо внести.
- `--var<VariableName>` (опционально): Дополнительные переменные, которые могут быть использованы в шаблонах EJS.

### Пример конфигурационного файла

Пример конфигурационного файла `nxmv.config.js`:

```javascript
module.exports = {
  versions: {
    'my-project': {
      project: 'apps/my-project',
      remove: ['apps/my-project/old-file.ts'],
      extFile: ['.ejs'],
      consts: {
        appName: 'My Project',
      },
    },
  },
};
```

### Обновление файлов с определенными расширениями

Генератор обновляет только файлы с расширениями, указанными в свойствах `extFile` для файлов и `extFolder` для папок в конфигурационном файле.

#### Пример конфигурационного файла с `extFile` и `extFolder`

```javascript
module.exports = {
  versions: {
    v18: {
      extFolder: ['.ng18'],
      extFile: ['.ng18'],
      all: true,
      rootChange: true,
      remove: ['angular.json'],
      consts: {
        ngVersion: '18.1.3',
      },
    },
  },
};
```

#### Пояснение свойств

- `extFolder`: Список расширений папок, которые будут обновлены. Например, если указано `.ng18`, все папки с этим расширением будут обработаны.
- `extFile`: Список расширений файлов, которые будут обновлены. Например, если указано `.ng18`, все файлы с этим расширением будут обработаны.
- `all`: Если установлено в `true`, обновляет все проекты в рабочем пространстве. Если `false`, обновляет только указанные проекты.
- `rootChange`: Если установлено в `true`, обновляет файлы в корневой директории проекта.
- `remove`: Список файлов, которые будут удалены перед выполнением обновлений.
- `consts`: Константы, которые будут доступны в шаблонах EJS для динамического создания файлов. В данном примере, `ngVersion` будет доступен в шаблонах как переменная.

### Пример запуска генератора

#### Пример 1: Базовый запуск

```bash
nx generate @prizm-ui/nx-mv:apply --name=my-project --config=./nxmv.config.js
```

#### Пример 2: Запуск с дополнительными переменными

```bash
nx generate @prizm-ui/nx-mv:apply --name=my-project --config=./nxmv.config.js --varAPIEndpoint=https://api.example.com --varFeatureFlag=true
```

### Пример использования шаблонов EJS

Генератор поддерживает использование шаблонов EJS для динамического создания файлов. Пример использования:

#### Шаблонный файл `exampleFile.ejs`

```ejs
export const API_ENDPOINT = "<%= APIEndpoint %>";
export const FEATURE_FLAG = <%= featureFlag %>;
```

#### Конфигурация для шаблона

```javascript
module.exports = {
  versions: {
    'my-project': {
      project: 'apps/my-project',
      extFile: ['.ejs'],
      consts: {
        APIEndpoint: 'https://api.default.com',
        featureFlag: false,
      },
    },
  },
};
```

#### Запуск генератора с переменными

```bash
nx generate @prizm-ui/nx-mv:apply --name=my-project --config=./nxmv.config.js --varAPIEndpoint=https://api.example.com --varFeatureFlag=true
```

После выполнения этой команды, файл `exampleFile.ejs` будет преобразован в:

```typescript
export const API_ENDPOINT = 'https://api.example.com';
export const FEATURE_FLAG = true;
```

### Пример конфигурационного файла для Angular 18

Конфигурационный файл `nxmv.config.js` для проекта с Angular 18:

```javascript
module.exports = {
  versions: {
    v18: {
      extFolder: ['.ng18'],
      extFile: ['.ng18'],
      all: true,
      rootChange: true,
      remove: ['angular.json'],
      consts: {
        ngVersion: '18.1.3',
      },
    },
  },
};
```

#### Пояснение свойств

- `extFolder`: Список расширений папок, которые будут обновлены. Например, если указано `.ng18`, все папки с этим расширением будут обработаны.
- `extFile`: Список расширений файлов, которые будут обновлены. Например, если указано `.ng18`, все файлы с этим расширением будут обработаны.
- `all`: Если установлено в `true`, обновляет все проекты в рабочем пространстве. Если `false`, обновляет только указанные проекты.
- `rootChange`: Если установлено в `true`, обновляет файлы в корневой директории проекта.
- `remove`: Список файлов, которые будут удалены перед выполнением обновлений.
- `consts`: Константы, которые будут доступны в шаблонах EJS для динамического создания файлов. В данном примере, `ngVersion` будет доступен в шаблонах как переменная.

### Пример запуска генератора

```bash
nx generate @prizm-ui/nx-mv:apply --name=v18 --config=./nxmv.config.js
```

### Игнорирование файлов

Генератор использует файл `nxmv.ignore` для указания файлов и директорий, которые следует игнорировать при обновлении. Формат файла аналогичен `.gitignore`.

Пример файла `nxmv.ignore`:

```
node_modules/
dist/
```

### Заключение

Генератор `@prizm-ui/nx-mv:apply` предоставляет мощный и гибкий способ автоматизировать обновление файлов проектов в рабочем пространстве Nx. Используйте конфигурационные файлы и шаблоны EJS для создания и модификации файлов на лету. Убедитесь, что вы указали необходимые расширения файлов и папок в конфигурационном файле, чтобы генератор знал, какие файлы обновлять.

Если у вас возникнут вопросы или проблемы, пожалуйста, откройте issue в репозитории проекта на GitHub.