TBR: Use "node npm" rather than calling "npm" directly.

Change-Id: I06ed96bf2d6f8de2b020b6a270fbfdb78b222288
diff --git a/Makefile b/Makefile
index 6ad52bc..55b8467 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,10 @@
 NODE_DIR := $(shell jiri v23-profile list --info Target.InstallationDir nodejs)
 export PATH := ./go/bin:$(JIRI_ROOT)/release/go/bin:node_modules/.bin:$(NODE_DIR)/bin:$(PATH)
 
+# NOTE: we run npm using 'node npm' to avoid relying on the shebang line in the
+# npm script, which can exceed the Linux shebang length limit on Jenkins.
+NPM := $(NODE_DIR)/bin/npm
+
 # This target causes any target files to be deleted if the target task fails.
 .DELETE_ON_ERROR:
 
@@ -62,12 +66,12 @@
 	jiri run vdl generate --lang=javascript --js-out-dir=src/gen-vdl v.io/v23/services/syncbase/...
 
 node_modules: package.json
-	npm prune
-	npm install
+	node $(NPM) prune
+	node $(NPM) install
 	# Link Vanadium from JIRI_ROOT.
 	rm -rf ./node_modules/vanadium
-	cd "$(JIRI_ROOT)/release/javascript/core" && npm link
-	npm link vanadium
+	cd "$(JIRI_ROOT)/release/javascript/core" && node $(NPM) link
+	node $(NPM) link vanadium
 	touch node_modules
 
 # We use the same test runner as vanadium.js.  It handles starting and stopping