Javascript: obtenha dados do package.json em gulpfile.js

101

Não é uma questão específica do gulp em si, mas como alguém obteria informações do arquivo package.json dentro do gulpfile.js; Por exemplo, quero obter a página inicial ou o nome e usá-lo em uma tarefa.

faixa
fonte

Respostas:

116

Não use require('./package.json')para um processo de relógio. Usar requireresolverá o módulo como os resultados da primeira solicitação. Portanto, se você estiver editando seu package.json, essas edições não funcionarão, a menos que você interrompa o processo de observação e reinicie-o. Para um processo de observação gulp, seria melhor usar o método bitlinguist, pois ele irá reler o arquivo e analisá-lo cada vez que sua tarefa for executada.

var fs = require('fs');

var json = JSON.parse(fs.readFileSync('./package.json'));
hapticdata
fonte
4
Concordou que "require" armazena o resultado em cache (tornando-o inadequado se você pretende ler / modificar / reler novamente). Isso não significa que seja uma solução ruim em todos os casos. O OP mencionou explicitamente que queria ler as informações dele.
Mangled Deutz
2
É possível usar requiree remover o cache comdelete require.cache[require.resolve(FILEPATH)];
curly_brackets
@KennethB Por que não como uma resposta separada? Iria gerar mais votos positivos do que o suficiente.
kaiser
138

Isso não é específico do gole.

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

ATUALIZAR:

Esteja ciente de que "require" armazenará em cache os resultados da leitura - o que significa que você não pode solicitar, gravar no arquivo e depois exigir novamente e esperar que os resultados sejam atualizados.

Deutz mutilado
fonte
7
Eu definitivamente me senti uma idiota por pesquisar isso quando vi sua resposta. Claro!
spikeheap
1
Funcionou para mim: P. E +1 para o comentário sobre o cache, mais tarde passei a usar 'fs.readFileSync () `conforme indicado abaixo.
Bart
@spikeheap Não sei se já ri alto antes de ler um comentário no StackOverflow, mas estava BEM lá com você! Obrigado pelos aplausos. Haha.
bit-less
6

Esta é uma boa solução @Mangled Deutz. Eu mesmo fiz isso primeiro, mas não funcionou (voltando a isso em um segundo), então tentei esta solução:

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

Agora você deve ver que isso é um pouco prolixo (embora tenha funcionado). require('./package.json')é a melhor solução:

Dica

- lembre-se de adicionar './' na frente do nome do arquivo. Eu sei que é simples, mas é a diferença entre o método require funcionar e não funcionar.

Dewwwald
fonte
Obrigado! isso ajudou tremendamente.
Adam Grant
1
obrigado por votos positivos, finalmente tem comentários. :) Que bom que ajudou você.
dewwwald
0

Se você estiver acionando o gulp do NPM, como usar " npm run build " ou algo assim

(Isso só funciona para gatilhos de gulp run por NPM)

process.env.npm_package_ Object

isso deve ser separado por sublinhado para objetos mais profundos.

se você deseja ler alguma configuração específica em package.json como deseja ler o objeto de configuração que você criou em package.json

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

então você pode usar

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