I am trying to build an Azure Pipeline in Azure DevOps. The problem is that when a pipeline ran, an error occurred in an npm build task. Could it be that there are some outdated packages in package.json? Or could it be that npm is outdated?
See Step 4 in a tutorial where a pipeline started to run:
Screenshot of build tasks in a pipeline:
2021-12-03T00:13:53.4119601Z ##[section]Starting: Run npm install 2021-12-03T00:13:53.4130006Z ============================================================================== 2021-12-03T00:13:53.4130664Z Task : npm 2021-12-03T00:13:53.4144256Z Description : Install and publish npm packages, or run an npm command. Supports npmjs.com and authenticated registries like Azure Artifacts. 2021-12-03T00:13:53.4145177Z Version : 1.187.0 2021-12-03T00:13:53.4145620Z Author : Microsoft Corporation 2021-12-03T00:13:53.4146127Z Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/package/npm 2021-12-03T00:13:53.4146868Z ============================================================================== 2021-12-03T00:13:54.7198556Z [command]/usr/local/bin/npm --version 2021-12-03T00:13:55.4151672Z 8.1.0 2021-12-03T00:13:56.0808980Z [command]/usr/local/bin/npm config list 2021-12-03T00:13:56.3808693Z ; "env" config from environment 2021-12-03T00:13:56.3811792Z 2021-12-03T00:13:56.3813271Z userconfig = "/home/vsts/work/1/npm/13.npmrc" 2021-12-03T00:13:56.3814393Z 2021-12-03T00:13:56.3815603Z ; node bin location = /usr/local/bin/node 2021-12-03T00:13:56.3816682Z ; cwd = /home/vsts/work/1/s 2021-12-03T00:13:56.3817732Z ; HOME = /home/vsts 2021-12-03T00:13:56.3819465Z ; Run `npm config ls -l` to show all defaults. 2021-12-03T00:13:56.3822946Z [command]/usr/local/bin/npm install 2021-12-03T00:16:21.9362133Z npm WARN old lockfile 2021-12-03T00:16:21.9365129Z npm WARN old lockfile The package-lock.json file was created with an old version of npm, 2021-12-03T00:16:21.9369471Z npm WARN old lockfile so supplemental metadata must be fetched from the registry. 2021-12-03T00:16:21.9370832Z npm WARN old lockfile 2021-12-03T00:16:21.9372351Z npm WARN old lockfile This is a one-time fix-up, please be patient... 2021-12-03T00:16:21.9373414Z npm WARN old lockfile 2021-12-03T00:16:21.9375186Z npm WARN deprecated email@example.com: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. ''' ''' 2021-12-03T00:16:22.4541247Z 2732 error | ^ 2021-12-03T00:16:22.4542220Z 2732 error /home/vsts/.node-gyp/16.13.0/include/node/node.h:855:3: note: in expansion of macro ‘NODE_MODULE_X’ 2021-12-03T00:16:22.4543014Z 2732 error 855 | NODE_MODULE_X(modname, regfunc, NULL, 0) // NOLINT (readability/null_usage) 2021-12-03T00:16:22.4543629Z 2732 error | ^~~~~~~~~~~~~ 2021-12-03T00:16:22.4544459Z 2732 error ../src/binding.cpp:358:1: note: in expansion of macro ‘NODE_MODULE’ 2021-12-03T00:16:22.4545125Z 2732 error 358 | NODE_MODULE(binding, RegisterModule); 2021-12-03T00:16:22.4545958Z 2732 error | ^~~~~~~~~~~ 2021-12-03T00:16:22.4546611Z 2732 error make: *** [binding.target.mk:133: Release/obj.target/binding/src/binding.o] Error 1 2021-12-03T00:16:22.4547249Z 2732 error gyp ERR! build error 2021-12-03T00:16:22.4547826Z 2732 error gyp ERR! stack Error: `make` failed with exit code: 2 2021-12-03T00:16:22.4548944Z 2732 error gyp ERR! stack at ChildProcess.onExit (/home/vsts/work/1/s/node_modules/node-gyp/lib/build.js:262:23) 2021-12-03T00:16:22.4550047Z 2732 error gyp ERR! stack at ChildProcess.emit (node:events:390:28) 2021-12-03T00:16:22.4550822Z 2732 error gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12) 2021-12-03T00:16:22.4551766Z 2732 error gyp ERR! System Linux 5.11.0-1021-azure 2021-12-03T00:16:22.4552997Z 2732 error gyp ERR! command "/usr/local/bin/node" "/home/vsts/work/1/s/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library=" 2021-12-03T00:16:22.4554136Z 2732 error gyp ERR! cwd /home/vsts/work/1/s/node_modules/node-sass 2021-12-03T00:16:22.4554904Z 2732 error gyp ERR! node -v v16.13.0 2021-12-03T00:16:22.4555635Z 2732 error gyp ERR! node-gyp -v v3.8.0 2021-12-03T00:16:22.4556152Z 2732 error gyp ERR! not ok 2021-12-03T00:16:22.4556664Z 2732 error Build failed with error code: 1 2021-12-03T00:16:22.4557176Z 2733 verbose exit 1 2021-12-03T00:16:22.4557451Z 2021-12-03T00:16:22.4593929Z ##[error]Error: Npm failed with return code: 1 2021-12-03T00:16:22.4611672Z ##[section]Finishing: Run npm install
Why did the error occur in this task?
Microsoft updated their VMs around the 3rd December.
In this change the default node version has changed from 14.x to 16.x.
We found this exact issue when running on node 16.
This won’t be a Long term fix – As you’ll need to work out why your build doesn’t work on Node 16, but in the short term you can add a command which tells the build agent to use version 14 of node.
Presuming you are using the modern YAML build pipelines, try adding the following as the first step in your YAML pipeline:
- task: NodeTool@0 inputs: versionSpec: '14.x'
This should solve any node 16 issues.
If you use Classic pipelines there may be a way of including this step as it is Microsoft provided, but I’m not sure as I don’t use Classic mode.
If you’ve run
npm version 8 (which comes with node 16) it will probably have upgraded your package-lock.json file to the newer version 2 schema.
This updated package-lock.json won’t work with version 14, you’ll need to revert the file back to version 1 (which if you don’t have an old version in source control can be done by just deleting package-lock and running
Answered By – SgtWilko
Answer Checked By – David Marino (Easybugfix Volunteer)