icon

API Reference

@mutates/nx

The @mutates/nx package extends Mutates functionality to work seamlessly with Nx workspaces, providing tools for manipulating Nx project configurations and workspace files.

Installation

Install both the Nx package and the core package:

npm install @mutates/nx @mutates/core

Basic Usage

Project Setup

Initialize an Nx project with Mutates:

import { saveProject } from '@mutates/core';
import { createNxProject } from '@mutates/nx';

// Create project with Nx support
createNxProject();

// Make modifications...

// Save changes
saveProject();

Project Configuration

Modifying Project Configuration

import { editProjectConfiguration } from '@mutates/nx';

// Update project configuration
editProjectConfiguration('my-app', {
  targets: {
    build: {
      executor: '@nx/webpack:webpack',
      options: {
        outputPath: 'dist/apps/my-app',
        main: 'apps/my-app/src/main.ts',
      },
    },
  },
});

Adding Dependencies

import { addProjectDependencies } from '@mutates/nx';

// Add project dependencies
addProjectDependencies('my-app', {
  dependencies: ['shared-lib'],
  type: 'implicit', // or 'explicit'
});

Workspace Management

Updating Workspace Configuration

import { updateWorkspaceConfig } from '@mutates/nx';

// Update workspace configuration
updateWorkspaceConfig({
  npmScope: 'my-org',
  defaultProject: 'main-app',
  generators: {
    '@nx/angular:application': {
      style: 'scss',
      strict: true,
    },
  },
});

Managing Tags

import { addProjectTags } from '@mutates/nx';

// Add tags to project
addProjectTags('my-app', ['frontend', 'public-api']);

Library Management

Creating Libraries

import { addLibrary } from '@mutates/nx';

// Add new library
addLibrary({
  name: 'shared-utils',
  directory: 'libs/shared',
  tags: ['utils', 'shared'],
});

Modifying Libraries

import { editLibrary } from '@mutates/nx';

// Modify library configuration
editLibrary('shared-utils', {
  buildable: true,
  publishable: true,
});

Application Management

Creating Applications

import { addApplication } from '@mutates/nx';

// Add new application
addApplication({
  name: 'admin-portal',
  directory: 'apps/admin',
  tags: ['admin', 'frontend'],
});

Configuring Applications

import { editApplication } from '@mutates/nx';

// Update application configuration
editApplication('admin-portal', {
  strict: true,
  standalone: true,
});

Generator Configuration

Customizing Generators

import { updateGeneratorDefaults } from '@mutates/nx';

// Set default generator options
updateGeneratorDefaults('@nx/angular:component', {
  style: 'scss',
  changeDetection: 'OnPush',
  standalone: true,
});

Common Use Cases

Setting Up Module Boundaries

import { setupModuleBoundaries } from '@mutates/nx';

// Configure module boundaries
setupModuleBoundaries({
  enforce: [
    {
      sourceTag: 'type:feature',
      onlyDependOnLibsWithTags: ['type:shared', 'type:util'],
    },
    {
      sourceTag: 'scope:admin',
      notDependOnLibsWithTags: ['scope:public'],
    },
  ],
});

Configuring Build Targets

import { updateBuildTarget } from '@mutates/nx';

// Update build configuration
updateBuildTarget('my-app', {
  optimization: true,
  sourceMap: false,
  extractLicenses: true,
});

Best Practices

Pattern Matching

Use specific patterns for different project types:

// Libraries
getLibraries({ pattern: 'libs/**/*.ts' });

// Applications
getApplications({ pattern: 'apps/**/*.ts' });

Error Handling

Wrap Nx operations in try-catch:

import { resetActiveProject } from '@mutates/core';
import { createNxProject } from '@mutates/nx';

try {
  createNxProject();
  // Your transformations...
} catch (error) {
  console.error('Nx transformation failed:', error);
} finally {
  resetActiveProject();
}

Integration with Other Tools

Angular Integration

import { addAngularLibrary } from '@mutates/angular';
import { createNxProject } from '@mutates/nx';

// Combine Nx and Angular operations
createNxProject();
addAngularLibrary({
  name: 'feature-auth',
  directory: 'libs/features',
});

Testing Setup

import { updateTestTarget } from '@mutates/nx';

// Configure test setup
updateTestTarget('my-app', {
  executor: '@nx/jest:jest',
  options: {
    jestConfig: 'apps/my-app/jest.config.ts',
    passWithNoTests: true,
  },
});

Next Steps

API Reference

For a comprehensive guide on the available APIs and their usage, please refer to the official documentation

Contributing

🤝 Contributions are welcome! If you have any improvements or suggestions, feel free to open an issue or submit a pull request.

License

đź“„ @mutates/nx is licensed under the Apache-2.0 License. See the LICENSE file for more information.


For further assistance or to report issues, please visit our GitHub repository.

Previous
Angular API