Javascript: gulpfile.js'de package.json verilerini alın


101

Kendine özgü bir soru değil, gulpfile.js içindeki package.json dosyasından nasıl bilgi alınır; Örneğin, ana sayfayı veya adı alıp bir görevde kullanmak istiyorum.

Yanıtlar:


116

require('./package.json')Bir izleme süreci için kullanmayın . Kullanımı require, modülü ilk isteğin sonuçları olarak çözecektir. Bu nedenle, package.json dosyanızı düzenliyorsanız, bu düzenlemeler, saat sürecinizi durdurup yeniden başlatmadığınız sürece çalışmayacaktır. Bir yudum izleme süreci için, dosyayı yeniden okuyacağından ve göreviniz her yürütüldüğünde ayrıştıracağından, bitlinguist yöntemini kullanmak en iyisidir.

var fs = require('fs');

var json = JSON.parse(fs.readFileSync('./package.json'));

4
"Gerekli" nin sonucu önbelleğe alacağı kabul edildi (okumak / değiştirmek / tekrar okumak istiyorsanız bunu uygunsuz kılar). Ancak bu, her durumda onu kötü bir çözüm yapmaz. OP, bundan bilgi okumak istediğini açıkça belirtti.
Mangled Deutz

2
requireÖnbelleği kullanmak ve kaldırmak mümkündelete require.cache[require.resolve(FILEPATH)];
curly_brackets

@KennethB Neden ayrı bir cevap olarak değil? Yeterince olumlu oy alırdı.
kaiser

138

Bu, yutmaya özgü değildir.

var p = require('./package.json')
p.homepage

GÜNCELLEME:

"Zorunlu tut" seçeneğinin okuma sonuçlarını önbelleğe alacağını unutmayın - bu, gerekli olamayacağınız, dosyaya yazamayacağınız, ardından tekrar isteyemeyeceğiniz ve sonuçların güncellenmesini bekleyemeyeceğiniz anlamına gelir.


7
Cevabınızı görünce, bunu aradığım için kendimi kesinlikle aptal gibi hissettim. Elbette!
spikeheap

1
Benim için çalıştı: P. Önbelleğe alma ile ilgili yorum için +1, daha sonra aşağıda belirtildiği gibi 'fs.readFileSync ()' kullanmaya geçtim.
Bart

@spikeheap StackOverflow'da bir yorumu okumadan önce hiç yüksek sesle gülüp gülmedim mi bilmiyorum, ama seninleydim! Şerefe için teşekkürler. Haha.
bit az

6

Bu iyi bir çözüm @Mangled Deutz. Bunu önce kendim yaptım ama işe yaramadı (Bir saniye sonra buna geri döndüm), sonra bu çözümü denedim:

# Gulpfile.coffee
requireJSON = (file) ->
    fs = require "fs"
    JSON.parse fs.readFileSync file

Şimdi bunun biraz ayrıntılı olduğunu görmelisiniz (işe yarasa da). require('./package.json')en iyi çözüm:

İpucu

-dosya adının önüne './' eklemeyi unutmayın. Basit olduğunu biliyorum, ancak gerekli yöntem ile çalışma ve çalışmama arasındaki fark bu.


Teşekkürler! bu çok yardımcı oldu.
Adam Grant

1
olumlu oylar için teşekkürler, sonunda yorumlarınız var. :) Sana yardımcı olmasına sevindim.
dewwwald

0

NPM'den yutkuyu tetikliyorsanız, "NPM'den yutkuyu npm run build " veya başka bir şey

(Bu yalnızca NPM tarafından yutkunma çalıştırma tetikleyicileri için geçerlidir)

process.env.npm_package_ Nesne

bu, daha derin nesneler için alt çizgi ile ayrılmalıdır.

package.json'da oluşturduğunuz yapılandırma nesnesini okumak istediğiniz gibi package.json'da belirli bir yapılandırma okumak istiyorsanız

scripts : {
   build: gulp 
},
config : {
   isClient: false.
}

o zaman kullanabilirsin

process.env.npm_package_**config_isClient**
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.