Socket
Socket
Sign inDemoInstall

@uscreen.de/nxprune

Package Overview
Dependencies
31
Maintainers
7
Versions
5
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @uscreen.de/nxprune

prune your monorepo package for docker build


Version published
Weekly downloads
15
increased by36.36%
Maintainers
7
Install size
702 kB
Created
Weekly downloads
 

Readme

Source

nxprune - like turbo prune --docker for nx.js

pre-alpha: supports yarn workspaces with plain nx tasks only. Tested on a few private monorepos only.

Example Dockerfile

Uses multi-stage setup to build a production docker image with the following steps:

  1. prune
  2. install dev (needed for build)
  3. install prod
  4. build
  5. combine prod & build for production

nxprune installs globally within docker container to prune one service or package from your workspace. The Dockerfile requires two env variables so it can be used as one template for all services within a workspace.

FROM node:16-bullseye-slim AS base
WORKDIR /app

# prune (aka isolate) scope from all packages in monorepo
FROM base AS pruner
COPY . .
RUN yarn global add @uscreen.de/nxprune
RUN nxprune --scope=${SCOPE}

# install dev deps
FROM base AS dev-deps
COPY --from=pruner /app/out/json/ .
COPY --from=pruner /app/out/yarn.lock ./yarn.lock
RUN yarn install --frozen-lockfile

# install prod deps
FROM base AS prod-deps
COPY --from=pruner /app/out/json/ .
COPY --from=pruner /app/out/yarn.lock ./yarn.lock
RUN yarn install --frozen-lockfile --production --prefer-offline --ignore-scripts

# run a build with dev deps for pruned scope
FROM base AS builder
COPY --from=dev-deps /app/ .
COPY --from=pruner /app/out/full/ .
RUN yarn nx run ${SCOPE}:build
RUN find . -name node_modules | xargs rm -rf
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -qq install dumb-init

# copy to tiny production image
FROM gcr.io/distroless/nodejs-debian11:16
COPY --from=builder /usr/bin/dumb-init /usr/bin/dumb-init
WORKDIR /app
USER nonroot
COPY --chown=nonroot:nonroot --from=prod-deps /app/ .
COPY --chown=nonroot:nonroot --from=builder /app/ .
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
CMD ["/nodejs/bin/node", "--unhandled-rejections=strict", "${APP}"]

Build a docker image

plain sh like command to build a service image, i.e.:

SCOPE=@myrepo/myservice APP=apps/myservice/index.js envsubst < ./Dockerfile | docker build . -f- -t myrrepo-myservice:latest --secret id=npmrc,src=.npmrc

This is to be run from root of the monorepo with a directory layout like so:

├── Dockerfile
├── node_modules
├── nx.json
├── package.json
├── apps
│   ├── myservice
│   │   ├── index.js
│   │   └── package.json
│   └── yourservice
└── yarn.lock

License

Licensed under MIT.

Published, Supported and Sponsored by u|screen

FAQs

Last updated on 04 Oct 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc