Javascript: récupérer les données package.json dans gulpfile.js

101

Pas une question spécifique à gulp en soi, mais comment obtenir des informations à partir du fichier package.json dans le gulpfile.js; Par exemple, je veux obtenir la page d'accueil ou le nom et l'utiliser dans une tâche.

voie
la source

Réponses:

116

Ne pas utiliser require('./package.json')pour un processus de surveillance. L'utilisation requirerésoudra le module comme les résultats de la première requête. Donc, si vous modifiez votre package.json, ces modifications ne fonctionneront que si vous arrêtez votre processus de surveillance et le redémarrez. Pour un processus de surveillance gulp, il serait préférable d'utiliser la méthode de bitlinguist car il relira le fichier et l'analysera chaque fois que votre tâche est exécutée.

var fs = require('fs');

var json = JSON.parse(fs.readFileSync('./package.json'));
données haptiques
la source
4
Convenu que "require" met en cache le résultat (le rendant inapproprié si vous avez l'intention de lire / modifier / relire). Cela n'en fait cependant pas une mauvaise solution dans tous les cas. Le PO a explicitement mentionné qu'il voulait en lire des informations.
Mangled Deutz
2
Il est possible d'utiliser requireet de supprimer le cache avecdelete require.cache[require.resolve(FILEPATH)];
curly_brackets
@KennethB Pourquoi pas comme réponse séparée? Conduirait plus que suffisamment de votes positifs.
kaiser le
138

Ce n'est pas spécifique à gulp.

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

METTRE À JOUR:

Sachez que "require" mettra en cache les résultats de lecture - ce qui signifie que vous ne pouvez pas exiger, écrire dans le fichier, puis exiger à nouveau et attendre que les résultats soient mis à jour.

Mangled Deutz
la source
7
Je me suis vraiment senti idiot de chercher cela quand j'ai vu votre réponse. Bien sûr!
spikeheap
1
A travaillé pour moi: P. Et +1 pour le commentaire sur la mise en cache, je suis ensuite passé à l'utilisation de 'fs.readFileSync ()' comme indiqué ci-dessous.
Bart le
@spikeheap Je ne sais pas si j'ai déjà ri aux éclats avant de lire un commentaire sur StackOverflow, mais j'étais juste là avec vous! Merci pour les acclamations. Haha.
peu moins
6

C'est une bonne solution @Mangled Deutz. J'ai moi-même d'abord fait ça mais ça n'a pas marché (Revenons à ça dans une seconde), puis j'ai essayé cette solution:

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

Maintenant, vous devriez voir que c'est un peu verbeux (même si cela a fonctionné). require('./package.json')est la meilleure solution:

Pointe

-n'oubliez pas d'ajouter «./» devant le nom du fichier. Je sais que c'est simple, mais c'est la différence entre la méthode requise qui fonctionne et qui ne fonctionne pas.

dewwwald
la source
Merci! cela a énormément aidé.
Adam Grant
1
merci pour les votes positifs, enfin avoir des commentaires. :) Heureux que cela vous ait aidé.
dewwwald
0

Si vous déclenchez gulp depuis NPM, comme utiliser " npm run build " ou quelque chose

(Cela ne fonctionne que pour les déclencheurs d'exécution gulp par NPM)

objet process.env.npm_package_

cela doit être séparé par un trait de soulignement pour les objets plus profonds.

si vous voulez lire une configuration spécifique dans package.json comme vous voulez lire l'objet de configuration que vous avez créé dans package.json

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

alors vous pouvez utiliser

process.env.npm_package_**config_isClient**
Manasvi Sareen
la source