Javascript: ottieni i dati package.json in gulpfile.js


101

Non è una domanda specifica per gulp di per sé, ma come si possono ottenere informazioni dal file package.json all'interno di gulpfile.js; Ad esempio, voglio ottenere la home page o il nome e utilizzarlo in un'attività.

Risposte:


116

Non utilizzare require('./package.json')per un processo di controllo. L'utilizzo requirerisolverà il modulo come risultato della prima richiesta. Quindi, se stai modificando il tuo package.json, tali modifiche non funzioneranno a meno che non interrompi il processo di visualizzazione e lo riavvii. Per un processo di controllo gulp sarebbe meglio usare il metodo di bitlinguist poiché rileggerà il file e lo analizzerà ogni volta che viene eseguita l'attività.

var fs = require('fs');

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

4
Conviene che "require" memorizzi nella cache il risultato (rendendolo inadatto se intendi leggere / modificare / rileggere). Ciò non lo rende comunque una cattiva soluzione in tutti i casi. L'OP ha detto esplicitamente che voleva leggere le informazioni da esso.
Mangled Deutz

2
È possibile utilizzare requiree rimuovere la cache condelete require.cache[require.resolve(FILEPATH)];
curly_brackets

@ KennethB Perché non come risposta separata? Porterebbe più di un numero sufficiente di voti positivi.
kaiser

138

Questo non è specifico per il gulp.

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

AGGIORNARE:

Tieni presente che "require" memorizzerà nella cache i risultati della lettura, il che significa che non è possibile richiedere, scrivere sul file, quindi richiedere di nuovo e aspettarsi che i risultati vengano aggiornati.


7
Mi sono decisamente sentito un idiota per aver cercato questo quando ho visto la tua risposta. Ovviamente!
spikeheap

1
Ha funzionato per me: P. E +1 per il commento sulla memorizzazione nella cache, in seguito sono passato a utilizzare 'fs.readFileSync () `come indicato di seguito.
Bart

@spikeheap Non so se ho mai riso ad alta voce prima di leggere un commento su StackOverflow, ma ero proprio lì con te! Grazie per gli applausi. Haha.
po 'meno

6

Questa è una buona soluzione @Mangled Deutz. Io stesso l'ho fatto prima ma non ha funzionato (torniamo a quello in un secondo), poi ho provato questa soluzione:

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

Ora dovresti vedere che questo è un po 'prolisso (anche se ha funzionato). require('./package.json')è la soluzione migliore:

Mancia

-Ricorda di aggiungere "./" davanti al nome del file. So che è semplice, ma è la differenza tra il metodo require funzionante e non funzionante.


Grazie! questo ha aiutato moltissimo.
Adam Grant,

1
grazie per i voti, finalmente i commenti. :) Sono contento che ti abbia aiutato.
dewwwald

0

Se stai attivando gulp da NPM, come usare " npm run build " o qualcosa del genere

(Funziona solo per i trigger di esecuzione gulp di NPM)

oggetto process.env.npm_package_

questo dovrebbe essere separato da un trattino basso per oggetti più profondi.

se vuoi leggere qualche configurazione specifica in package.json come vuoi leggere l'oggetto di configurazione che hai creato in package.json

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

quindi puoi usare

process.env.npm_package_**config_isClient**
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.