我可以从package.json
获得一个值:
LAST_VERSION := $(shell node -p "require('./package.json').version")
但是如果我需要几个值呢?像:
PROJECT := $(shell node -p "require('./package.json').name")
LAST_VERSION:= $(shell node -p "require('./package.json').version")
DESCRIPTION := $(shell node -p "require('./package.json').description")
PROJECT_URL := $(shell node -p "require('./package.json').repository.url")
这是唯一的方法吗?也许有办法创建一种列表。
答案 0 :(得分:16)
最后,我想出了这个:
define GetFromPkg
$(shell node -p "require('./package.json').$(1)")
endef
PROJECT := $(call GetFromPkg,name)
LAST_VERSION := $(call GetFromPkg,version)
DESCRIPTION := $(call GetFromPkg,description)
PROJECT_URL := $(call GetFromPkg,repository.url)
答案 1 :(得分:0)
这是已接受答案的调整版本。
通过使用GetValueFromJson
之类的参数调用data.profile.name
,可以轻松获取嵌套值。
define GetValueFromJson
$(shell node -p '\
const getVal = (key = "", obj = {}) => {
const currKey = key.split(".")[0];
const val = obj[currKey];
if(typeof val !== "object") return val;
const nextKey = key.split(".").slice(1).join(".");
return getVal(nextKey, val);
}; \
getVal(`$(1)`.replace(" ", ""), require("./package.json")); \
')
endef
PORT := $(call GetValueFromJson, config.port)
# make run
run:
PORT=${PORT} node server.js