@aws-prototyping-sdk/nx-monorepo
Project description
The nx-monorepo package vends a NxMonorepoProject Projen construct that adds NX monorepo support and manages your yarn/npm/pnpm workspaces on your behalf. This construct enables polygot builds (and inter language build dependencies), build caching, dependency visualization and much, much more.
The PDK itself uses the nx-monorepo project itself and is a good reference for seeing how a complex, polygot monorepo can be set up.
To get started simply run the following command in an empty directory:
npx projen new --from aws-prototyping-sdk nx-monorepo
This will boostrap a new Projen monorepo and contain the following in the .projenrc.ts:
import { nx_monorepo } from "aws-prototyping-sdk";
const project = new nx_monorepo.NxMonorepoProject({
defaultReleaseBranch: "main",
devDeps: ["aws-prototyping-sdk"],
name: "my-package",
});
project.synth();
To add new packages to the monorepo, you can simply add them as a child to the monorepo. To demonstrate, lets add a PDK Pipeline TS Project as a child as follows:
import { nx_monorepo } from "aws-prototyping-sdk";
const project = new nx_monorepo.NxMonorepoProject({
defaultReleaseBranch: "main",
devDeps: ["aws-prototyping-sdk"],
name: "my-package",
});
new PDKPipelineTsProject({
parent: project,
outdir: "packages/cicd",
defaultReleaseBranch: "mainline",
name: "cicd",
cdkVersion: "2.1.0"
});
project.synth();
Once added, run npx projen
from the root directory. You will now notice a new TS package has been created under the packages/cicd path.
Now lets add a python project to the monorepo and add a inter-language build dependency.
import { nx_monorepo } from "aws-prototyping-sdk";
import { PDKPipelineTsProject } from "aws-prototyping-sdk/pipeline";
import { PythonProject } from "projen/lib/python";
const project = new nx_monorepo.NxMonorepoProject({
defaultReleaseBranch: "main",
devDeps: ["aws-prototyping-sdk"],
name: "test",
});
const pipelineProject = new PDKPipelineTsProject({
parent: project,
outdir: "packages/cicd",
defaultReleaseBranch: "mainline",
name: "cicd",
cdkVersion: "2.1.0"
});
// Standard Projen projects also work here
const pythonlib = new PythonProject({
parent: project,
outdir: "packages/pythonlib",
authorEmail: "",
authorName: "",
moduleName: "pythonlib",
name: "pythonlib",
version: "0.0.0"
});
// Pipeline project depends on pythonlib to build first
project.addImplicitDependency(pipelineProject, pythonlib);
project.synth();
Run npx projen
from the root directory. You will now notice a new Python package has been created under packages/pythonlib.
To visualize our dependency graph, run the following command from the root directory: npx nx graph
.
Now lets test building our project, from the root directory run npx nx run-many --target=build --all
. As you can see, the pythonlib was built first followed by the cicd package.
The NxMonorepoProject also manages your yarn/pnpm workspaces for you and synthesizes these into your package.json pnpm-workspace.yml respectively.
For more information on NX commands, refer to this documentation.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for aws_prototyping_sdk.nx_monorepo-0.0.85.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 89b3747b0766a697bf38417f9d0541b6d6214a5023fea7fc171515d3fbe9b38d |
|
MD5 | 89aac7351d987ad8401b1f7fa058e905 |
|
BLAKE2b-256 | a37535fbbaefd6c56f900034b18dcf6bc3ee4eb304a15b8c2a4d6a31bbc5049d |
Hashes for aws_prototyping_sdk.nx_monorepo-0.0.85-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d5676b96023b55ace7570d0139ec90c617b60b2b7925348450c2105e4fbb9a06 |
|
MD5 | bfcd146221ca29932194fa27b896e2c2 |
|
BLAKE2b-256 | cdd029bb12bb791d3aa33c2f115af63981484344fa8ee72553e8ca3dc55f740e |