Javascript: obtenga datos de package.json en gulpfile.js

101

No es una pregunta específica de gulp per se, pero ¿cómo se obtendría información del archivo package.json dentro del gulpfile.js? Por ejemplo, quiero obtener la página de inicio o el nombre y usarlo en una tarea.

carril
fuente

Respuestas:

116

No lo use require('./package.json')para un proceso de vigilancia. El uso requireresolverá el módulo como resultado de la primera solicitud. Entonces, si está editando su package.json, esas ediciones no funcionarán a menos que detenga el proceso de visualización y lo reinicie. Para un proceso de observación de gulp, sería mejor utilizar el método de bitlinguist, ya que volverá a leer el archivo y lo analizará cada vez que se ejecute su tarea.

var fs = require('fs');

var json = JSON.parse(fs.readFileSync('./package.json'));
hapticdata
fuente
4
Estuvo de acuerdo en que "require" almacena en caché el resultado (lo que lo hace inadecuado si tiene la intención de leer / modificar / leer de nuevo). Sin embargo, eso no lo convierte en una mala solución en todos los casos. El OP mencionó explícitamente que quería leer información.
Mangled Deutz
2
Es posible usar requirey eliminar el caché condelete require.cache[require.resolve(FILEPATH)];
curly_brackets
@KennethB ¿Por qué no como respuesta separada? Generaría más votos a favor que suficientes.
Kaiser
138

Esto no es específico de un trago.

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

ACTUALIZAR:

Tenga en cuenta que "require" almacenará en caché los resultados de lectura, lo que significa que no puede solicitar, escribir en el archivo, luego solicitar nuevamente y esperar que los resultados se actualicen.

Deutz destrozado
fuente
7
Definitivamente me sentí como un idiota por buscar esto cuando vi tu respuesta. ¡Por supuesto!
spikeheap
1
Trabajó para mí: P. Y +1 para el comentario sobre el almacenamiento en caché, luego cambié a usar 'fs.readFileSync ()' como se señala a continuación.
Bart
@spikeheap No sé si alguna vez me he reído en voz alta antes de leer un comentario sobre StackOverflow, ¡pero estaba justo contigo! Gracias por los aplausos. Jaja.
bit-less
6

Esta es una buena solución @Mangled Deutz. Yo mismo hice eso primero pero no funcionó (volviendo a eso en un segundo), luego probé esta solución:

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

Ahora debería ver que esto es un poco detallado (aunque funcionó). require('./package.json')es la mejor solución:

Propina

-recuerde agregar './' delante del nombre del archivo. Sé que es simple, pero es la diferencia entre el método requerido que funciona y no funciona.

Dewwwald
fuente
¡Gracias! esto ayudó enormemente.
Adam Grant
1
gracias por upvotes, finalmente tengo comentarios. :) Me alegro de que te haya ayudado.
dewwwald
0

Si está activando gulp desde NPM, como usar " npm run build " o algo

(Esto solo funciona para los desencadenantes de gulp run por NPM)

process.env.npm_package_ Object

esto debe separarse con un guión bajo para objetos más profundos.

si desea leer alguna configuración específica en package.json como si desea leer el objeto de configuración que ha creado en package.json

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

entonces puedes usar

process.env.npm_package_**config_isClient**
Manasvi Sareen
fuente