UNPKG

@nx-dart/nx-dart

Version:

A Nx plugin, that adds support for developing Dart and Flutter packages in a Nx workspace

181 lines (134 loc) 4.9 kB
`nx-dart` is a [Nx] plugin, that adds support for developing Dart and Flutter packages in a Nx workspace. > This plugin is at an early stage of development. Please open an > [issue][issues] if you find a **bug** or have a **feature request**. Feel free > to open a [discussion][discussions], if you have a **question**. # Features - Surface dependencies between packages to the Nx project graph. - Executors: - format - analyze - test - Generators: - add-package - change-lints # Getting started ## Create a new Nx workspace with the `nx-dart` preset Run the following command to create a new Nx workspace including `nx-dart`: ```shell npx create-nx-workspace <workspace-name> --preset=@nx-dart/nx-dart ``` ## Add Nx and `nx-dart` to an existing monorepo In an existing monorepo, run the following command to add Nx and `nx-dart`: ```shell npx add-nx-dart-to-monorepo ``` # Nx projects and Dart packages Every package that should be part of the Nx workspace needs to have a `project.json` file in the package root and needs to be registered in the `workspace.json` file at the root of the workspace. The `add-package` generator takes care of creating an initial `project.json` file and registering the project in `workspace.json`, under the package's name. If package B depends on package A and both live in the same workspace, the Nx project graph will reflect this dependency. Dependencies on local packages are **not automatically overridden** with path dependency for development, though. If this is something you need, implement your own mechanism for overriding dependencies or check out [Melos]. Melos is a Dart/Flutter specific monorepo tool with support for conventional commit based versioning and publishing, among other features. Melos and Nx complement each other, and can be used together. # Generators ## add-package Adds an existing Dart package to the workspace. This generator is usually used to integrate a package into the Nx workspace after creating it with `dart create` or `flutter create`: ```shell flutter create -t app apps/counter npx nx generate @nx-dart/nx-dart:add-package apps/counter ``` ### Options - `--project-type`: The Nx project type of the package. This is optional. If not specified, the project type is inferred. ## change-lints Changes the lint rules in the workspace analysis options. Lint rules are defined in the `analysis_options.yaml` file at the project root. These options apply to all packages in the workspace, that don't have a `analysis_options.yaml` file of their own. This generator changes the lint rules to one of the following: - `core`: Core rules from the [`lints`][lints] package. - `recommended`: Recommended rules from the [`lints`][lints] package. - `flutter`: Rules from the [`flutter_lints`][flutter_lints] package. - `all`: All available [lint rules][all_lints]. Requires resolving conflicting rules. ```shell npx nx generator @nx-dart/nx-dart:change-lints flutter ``` # Executors ## format Formats Dart files in a package. ```jsonc // libs/foo/project.json { "targets": { "format": { "executor": "@nx-dart/nx-dart:format", "outputs": [] } } } ``` ### Options - `check`: Whether to validate the current formatting instead of fixing it. Default is `false`. ## analyze Analyzes a Dart package. ```jsonc // libs/foo/project.json { "targets": { "analyze": { "executor": "@nx-dart/nx-dart:analyze", "outputs": [] } } } ``` ### Options - `fatalInfos`: Treat info level issues as fatal. Default is `true`. - `fatalWarnings`: Treat warning level issues as fatal. Default is `true`. ## test Runs Dart or Flutter tests in a package. ```jsonc // libs/foo/project.json { "targets": { "test": { "executor": "@nx-dart/nx-dart:test", "outputs": ["libs/foo/coverage"] }, "e2e": { "executor": "@nx-dart/nx-dart:test", "outputs": ["libs/foo/coverage"], "options": { "targets": ["integration_test"] } } } } ``` ### Options - `targets`: The files or directories which contain the tests to run. When not specified, all tests in the `test` directory are run. - `coverage`: Whether to collect coverage information. The `dart` tool does not output `lcov.info` files by default. The executor converts the Dart coverage data into a `lcov.info` file automatically. The `flutter` tool outputs a `lcov.info` file by default. All additional options are passed to the Dart or Flutter test tool. Abbreviations are not supported. [nx]: https://nx.dev/ [lints]: https://pub.dev/packages/lints [flutter_lints]: https://pub.dev/packages/flutter_lints [all_lints]: https://github.com/dart-lang/linter/blob/master/example/all.yaml [issues]: https://github.com/invertase/nx-dart/issues [discussions]: https://github.com/invertase/nx-dart/discussions [melos]: https://melos.invertase.dev