Skip to content

Commit db53b59

Browse files
committed
NODE_MANAGER=volta|nvm
1 parent c13a6b8 commit db53b59

6 files changed

Lines changed: 34 additions & 8 deletions

File tree

make/javascript.mk

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,21 @@ JS_PACKAGE_MANAGER_CWD_FLAG_YARN ?= --cwd
55
INSTALLED_NODE_VERSION := $(shell command -v node > /dev/null && node --version | cut -c2-3 || echo no)
66
NVM_SH := $(HOME)/.nvm/nvm.sh
77
NVM := $(shell test -f "$(NVM_SH)" && echo yes || echo no)
8+
VOLTA_BIN := $(shell command -v volta || echo no)
89
NODE_BIN := $(shell command -v node || echo no)
910
NPM_BIN := $(shell command -v npm || echo no)
1011
YARN_BIN := $(shell command -v yarn || echo no)
1112
NODE_VERSION ?= 16
1213

14+
# Auto-detect node manager: prefer Volta over NVM. Override with NODE_MANAGER=volta|nvm
15+
ifneq ($(VOLTA_BIN),no)
16+
NODE_MANAGER ?= volta
17+
else ifeq ($(NVM),yes)
18+
NODE_MANAGER ?= nvm
19+
else
20+
NODE_MANAGER ?= none
21+
endif
22+
1323
PHONY += js-install
1424
js-install: ## Install JS packages
1525
ifeq ($(JS_PACKAGE_MANAGER),yarn)
@@ -23,22 +33,30 @@ js-outdated: ## Show outdated JS packages
2333
$(call step,Show outdated JS packages with $(JS_PACKAGE_MANAGER)...)
2434
$(call node_run,outdated)
2535

26-
ifeq ($(NVM),no)
36+
ifeq ($(NODE_MANAGER),volta)
2737
define node_run
28-
$(call error,$(NVM_REQUIRED))
38+
$(call step,Run '$(JS_PACKAGE_MANAGER) $(1)' with Node $(NODE_VERSION)...\n)
39+
@volta run --node $(NODE_VERSION) $(JS_PACKAGE_MANAGER) $(if $(filter $(JS_PACKAGE_MANAGER),yarn),$(JS_PACKAGE_MANAGER_CWD_FLAG_YARN),$(JS_PACKAGE_MANAGER_CWD_FLAG_NPM)) $(PACKAGE_JSON_PATH) $(1)
2940
endef
30-
else
41+
else ifeq ($(NODE_MANAGER),nvm)
3142
define node_run
3243
$(call step,Run '$(JS_PACKAGE_MANAGER) $(1)' with Node $(NODE_VERSION)...\n)
3344
@. $(NVM_SH) && (nvm which $(NODE_VERSION) > /dev/null 2>&1 || nvm install $(NODE_VERSION)) && \
3445
nvm exec $(NODE_VERSION) $(JS_PACKAGE_MANAGER) $(if $(filter $(JS_PACKAGE_MANAGER),yarn),$(JS_PACKAGE_MANAGER_CWD_FLAG_YARN),$(JS_PACKAGE_MANAGER_CWD_FLAG_NPM)) $(PACKAGE_JSON_PATH) $(1)
3546
endef
47+
else
48+
define node_run
49+
$(call error,$(NODE_MANAGER_REQUIRED))
50+
endef
3651
endif
3752

38-
define NVM_REQUIRED
53+
define NODE_MANAGER_REQUIRED
54+
3955

56+
🚫 A node manager is required to run $(JS_PACKAGE_MANAGER) commands and control Node versions!
4057

41-
🚫 NVM is required to run $(JS_PACKAGE_MANAGER) commands and control Node versions!
58+
Install Volta (recommended): https://volta.sh
59+
Install NVM: https://github.com/nvm-sh/nvm
4260

4361

4462
endef
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
js-install JS_PACKAGE_MANAGER=npm PACKAGE_JSON_PATH=custom PACKAGE_JSON_EXISTS=yes NODE_VERSION=20 NODE_MANAGER=volta
2+
---
3+
printf "\n⭐ \033[0;33mRun 'npm install --no-audit --no-fund --engine-strict true' with Node 20...\n\033[0m\n"
4+
volta run --node 20 npm --prefix custom install --no-audit --no-fund --engine-strict true

tests/outputs/js-install-npm.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
js-install JS_PACKAGE_MANAGER=npm PACKAGE_JSON_PATH=custom PACKAGE_JSON_EXISTS=yes NODE_VERSION=20 NVM=yes
1+
js-install JS_PACKAGE_MANAGER=npm PACKAGE_JSON_PATH=custom PACKAGE_JSON_EXISTS=yes NODE_VERSION=20 NODE_MANAGER=nvm
22
---
33
printf "\n⭐ \033[0;33mRun 'npm install --no-audit --no-fund --engine-strict true' with Node 20...\n\033[0m\n"
44
. __HOME__/.nvm/nvm.sh && (nvm which 20 > /dev/null 2>&1 || nvm install 20) && nvm exec 20 npm --prefix custom install --no-audit --no-fund --engine-strict true
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
js-install PACKAGE_JSON_PATH=custom PACKAGE_JSON_EXISTS=yes NODE_VERSION=20 NODE_MANAGER=volta
2+
---
3+
printf "\n⭐ \033[0;33mRun 'yarn install --frozen-lockfile' with Node 20...\n\033[0m\n"
4+
volta run --node 20 yarn --cwd custom install --frozen-lockfile

tests/outputs/js-install-yarn.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
js-install PACKAGE_JSON_PATH=custom PACKAGE_JSON_EXISTS=yes NODE_VERSION=20 NVM=yes
1+
js-install PACKAGE_JSON_PATH=custom PACKAGE_JSON_EXISTS=yes NODE_VERSION=20 NODE_MANAGER=nvm
22
---
33
printf "\n⭐ \033[0;33mRun 'yarn install --frozen-lockfile' with Node 20...\n\033[0m\n"
44
. __HOME__/.nvm/nvm.sh && (nvm which 20 > /dev/null 2>&1 || nvm install 20) && nvm exec 20 yarn --cwd custom install --frozen-lockfile
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
js-install INSTALLED_NODE_VERSION=18 NODE_VERSION=18 PACKAGE_JSON_EXISTS=yes NVM=yes
1+
js-install INSTALLED_NODE_VERSION=18 NODE_VERSION=18 PACKAGE_JSON_EXISTS=yes NODE_MANAGER=nvm
22
---
33
printf "\n⭐ \033[0;33mRun 'yarn install --frozen-lockfile' with Node 18...\n\033[0m\n"
44
. __HOME__/.nvm/nvm.sh && (nvm which 18 > /dev/null 2>&1 || nvm install 18) && nvm exec 18 yarn --cwd . install --frozen-lockfile

0 commit comments

Comments
 (0)