2016-04-16 30 views
8

yapmak değişkenlerin bir listeye atamak: Birkaç değerleri gerekirseOku JSON ve ben bununla <code>package.json</code> değeri alabilirsiniz

LAST_VERSION := $(shell node -p "require('./package.json').version") 

Ama ne? Gibi:

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") 

Tek yol bu mu? Belki de bir liste oluşturmanın bir yolu vardır.

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) 
+2

ne kadar süreyle 'node' çağırma sürer: Sonunda – Jens

+0

@Jens Gerçekten de, performansı hiç etkilemiyor, belki de olduğu gibi bırak. –

+0

Tek bir "düğüm" çağrısı dört öğenin tümünü yazdırabiliyorsa, bunları ayırma sorununa sahip olursunuz. Doğa tarafından "make", alanı ayrılmış listeler kullandığı için, açıklamanın boşluk içerdiği için "açıklama" üyesinin sorunlu olmasını beklerim. Özel bir sınırlayıcıyla (virgülle? Noktalı virgül?) Çıktı oluşturmak zorunda kalacaksınız. – Jens

cevap

8

, ben bu geldi? Mikro optimizasyona değer mi? As-is, oldukça okunabilir görünüyor - gizlenmiş optimize edilmiş 'make' hackery için feda etmeyeceğim bir özellik.
+1

_make_'ın '$ (call ...)' içindeki parametrelerden boşluk bırakmadığını belirtmek gerekir. Buradan kurtuldun çünkü 'node -p' gerektiriyor ('./ package.json'). Name "' hala geçerli. ('$ (GetFromPkg, isim) 'i çağırmak, muhtemelen _make_ deyim IMHO'dur). – bobbogo

+0

@bobbogo Bunu işaretlediğiniz için teşekkürler. –

İlgili konular