From 5499f8cb3e15716e9713dcd5598711a2b52d97e9 Mon Sep 17 00:00:00 2001 From: Gordon Messmer Date: Wed, 22 Oct 2025 13:40:43 -0700 Subject: [PATCH] Support projects that require pnpm --- nodejs-packaging-bundler | 81 +++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/nodejs-packaging-bundler b/nodejs-packaging-bundler index 943368a..77eb40f 100755 --- a/nodejs-packaging-bundler +++ b/nodejs-packaging-bundler @@ -14,15 +14,68 @@ usage() { exit 1 } -if ! [ -f /usr/bin/npm ]; then - echo >&2 - echo "`basename $0` requires npm to run" >&2 - echo >&2 - echo "Run the following to fix this" >&2 - echo " sudo dnf install npm" >&2 - echo >&2 - exit 2 -fi +# Set to "npm" or "pnpm": +NPM=npm + +require_npm() { + if ! [ -f /usr/bin/npm ]; then + echo >&2 + echo "`basename $0` requires npm to run" >&2 + echo >&2 + echo "Run the following to fix this" >&2 + echo " sudo dnf install npm" >&2 + echo >&2 + exit 2 + fi +} +# For now, always require npm: +require_npm + +require_pnpm() { + if ! [ -f /usr/bin/pnpm ]; then + echo >&2 + echo "`basename $0` requires pnpm to run" >&2 + echo >&2 + echo "Run the following to fix this" >&2 + echo " sudo dnf install pnpm" >&2 + echo >&2 + exit 2 + fi + NPM=pnpm +} + +npm_pack() { + case "${NPM}" in + npm) + npm pack "$@" + ;; + pnpm) + pnpm pack "$@" + ;; + esac +} + +npm_install_dev() { + case "${NPM}" in + npm) + npm install --omit=optional + ;; + pnpm) + pnpm install --no-optional --dev + ;; + esac +} + +npm_install_prod() { + case "${NPM}" in + npm) + npm install --omit=optional --omit=dev + ;; + pnpm) + pnpm install --no-optional --prod + ;; + esac +} if [ $# -lt 1 ]; then usage @@ -54,20 +107,22 @@ pushd ${TMP_DIR} if [ -f "$TARBALL" ]; then TARBALL_DIR=$(mktemp -d -t ci-XXXXXXXXXX) pushd ${TARBALL_DIR} + [ -f pnpm-workspace.yaml ] && require_pnpm tar xfz ${TARBALL} --strip-components 1 - npm pack . + npm_pack . popd > /dev/null mv ${TARBALL_DIR}/*.tgz . rm -rf ${TARBALL_DIR} else - npm pack ${PACKAGE} + npm_pack ${PACKAGE} fi tar xfz *.tgz cd package +[ -f pnpm-workspace.yaml ] && require_pnpm for packagejson in $(find . -type d -name node_modules\* -prune -o -type f -name package.json -print); do pushd $(dirname $packagejson) echo " Downloading prod dependencies" - npm install --omit=dev --omit=optional + npm_install_prod if [ $? -ge 1 ] ; then echo " ERROR WILL ROBINSON" rm -rf node_modules @@ -97,7 +152,7 @@ fi for packagejson in $(find . -type d -name node_modules\* -prune -o -type f -name package.json -print); do pushd $(dirname $packagejson) echo " Downloading dev dependencies" - npm install --omit=optional + npm_install_dev if [ $? -ge 1 ] ; then echo " ERROR WILL ROBINSON" else