What is @nrwl/devkit?
The @nrwl/devkit package is a set of utilities designed to improve the developer experience by providing tools for building, testing, and managing Angular and React projects within a monorepo setup. It is part of the Nx ecosystem, which focuses on bringing a unified approach to working with modern web technologies.
What are @nrwl/devkit's main functionalities?
Generating Components
This feature allows developers to programmatically generate components or other files within their project. The code sample demonstrates how to use the `generateFiles` function to create a new component in a library within the monorepo.
import { generateFiles } from '@nrwl/devkit';
function generateMyComponent(tree, schema) {
generateFiles(tree, path.join(__dirname, './files'), '/libs/mylib/src/lib', {
tmpl: '',
name: schema.name
});
}
Updating JSON Configuration
This feature provides a straightforward way to update JSON files, such as `tsconfig.json` or `.eslintrc.json`, programmatically. The code sample shows how to modify the `tsconfig.base.json` to add a new path mapping for a library.
import { updateJson } from '@nrwl/devkit';
function updateTsConfig(tree) {
updateJson(tree, 'tsconfig.base.json', (json) => {
json.compilerOptions.paths['@myorg/mylib'] = ['libs/mylib/src/index.ts'];
return json;
});
}
Executing Schematic Tasks
This feature enables developers to execute tasks such as adding project configurations or formatting files. The code sample illustrates how to add a new library configuration to the workspace and then format all files according to the workspace's prettier or eslint configurations.
import { addProjectConfiguration, Tree, formatFiles } from '@nrwl/devkit';
function addMyLib(tree: Tree) {
addProjectConfiguration(tree, 'my-lib', {
root: './libs/my-lib',
projectType: 'library',
targets: {},
});
formatFiles(tree);
}
Other packages similar to @nrwl/devkit
lerna
Lerna is a tool for managing JavaScript projects with multiple packages, similar to the Nx workspace concept. While Lerna focuses on multi-package repositories (monorepos), it does not provide the same level of integration for Angular and React projects or the same developer tools and utilities as @nrwl/devkit.
yeoman-generator
Yeoman is a generic scaffolding system allowing the creation of any kind of app. It provides generators for a wide variety of applications and frameworks. Compared to @nrwl/devkit, Yeoman is more flexible but lacks the specific optimizations and integrations for Angular and React projects within a monorepo setup.
@nrwl/devkit has been deprecated!
@nrwl/devkit has been deprecated in favor of @nx/devkit. Please use that instead.
@nrwl/devkit will no longer be published in Nx v17.
Nx: Smart, Fast and Extensible Build System
Nx is a next generation build system with first class monorepo support and powerful integrations.