|  | # Resolves to the repository root directory. | 
|  | # | 
|  | # Reference: https://stackoverflow.com/a/18137056. | 
|  | # | 
|  | # Since this variable will be visible to any Makefiles that include this file, we prefix it with | 
|  | # "_npm_mk" to reduce the chances of name collisions. | 
|  | _npm_mk_repo_root_dir := $(realpath $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/..) | 
|  |  | 
|  | # Add this as a prerequisite to any target that depends on the //node_modules directory. | 
|  | .PHONY: npm-ci | 
|  | npm-ci: $(_npm_mk_repo_root_dir)/node_modules/lastupdate | 
|  |  | 
|  | $(_npm_mk_repo_root_dir)/node_modules/lastupdate: $(_npm_mk_repo_root_dir)/package-lock.json | 
|  | # https://docs.npmjs.com/cli/v7/using-npm/config | 
|  | cd $(_npm_mk_repo_root_dir) && npm ci --fetch-retry-maxtimeout 300000 --fetch-timeout 600000 | 
|  | touch $(_npm_mk_repo_root_dir)/node_modules/lastupdate | 
|  |  | 
|  | $(_npm_mk_repo_root_dir)/package-lock.json: $(_npm_mk_repo_root_dir)/package.json | 
|  | cd $(_npm_mk_repo_root_dir) && npm install | 
|  | # If we change package.json and "npm install" leaves file package-lock.json intact, "make" will | 
|  | # always rebuild this target on subsequent invocations because it thinks that package-lock.json | 
|  | # is out of date. This can happen e.g. when we edit package.json without changing the | 
|  | # dependencies/devDependencies/etc. We prevent this by touching package-lock.json. | 
|  | touch $(_npm_mk_repo_root_dir)/package-lock.json |