New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@uscreen.de/nxprune

Package Overview
Dependencies
Maintainers
7
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@uscreen.de/nxprune

prune your monorepo package for docker build

  • 0.3.0
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
14
increased by100%
Maintainers
7
Weekly downloads
 
Created
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

Package last updated on 04 Oct 2022

Did you know?

Socket

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
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc