| # 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 |