Existe uma maneira de obter a versão definida package.json
em um aplicativo nodejs? Eu gostaria de algo assim
var port = process.env.PORT || 3000
app.listen port
console.log "Express server listening on port %d in %s mode %s", app.address().port, app.settings.env, app.VERSION
node.js
npm
version
versioning
Abhik Bose Pramanik
fonte
fonte
console.log(process.version)
Respostas:
Eu descobri que o seguinte fragmento de código funcionou melhor para mim. Como ele usa
require
para carregar opackage.json
, ele funciona independentemente do diretório de trabalho atual.Um aviso, cortesia de @Pathogen:
fonte
require('root-require')('package.json').version
Error: Cannot find module 'package.json'
.Se seu aplicativo for iniciado com 'npm start', você pode simplesmente usar:
Veja package.json vars para mais detalhes.
fonte
npm run …
) a versão estará na variável de ambiente$npm_package_version
.npm start
, mas não em um aplicativo de elétrons incorporado: para isso, você pode encontrá-loapp.getVersion
.Usando os módulos ES6, você pode fazer o seguinte:
fonte
Ou em concha velha lisa:
Isso pode ser reduzido para
Mesmo que essa não seja exatamente a pergunta, é útil se você quiser usar a versão em
package.json
si mesma, por exemplo, para fazer logon em um arquivo com versão emscript
:fonte
Existem duas maneiras de recuperar a versão:
package.json
e obtendo a versão:Por favor, não use
JSON.parse
,fs.readFile
,fs.readFileSync
e não use outranpm modules
que não é necessário para esta pergunta.fonte
npm_*
valores do ambiente estarão disponíveis apenas se o seu script tiver sido iniciado pelo NPM, por exemplonpm start
. Se você estiver fazendonode app.js
ou algo parecido, eles não estarão presentes.package.json
?Aqui está como ler a versão do package.json:
fonte
require() introduces? (for instance, does
requerem () `não suportam a leitura utf8? como seu snippet pode sugerir)require()
armazena em cache o arquivo, o que, neste caso, não deve fazer diferença.JSON.parse(fs.readFileSync('package.json', 'utf8'))
vez dedelete require.cache[require.resolve('package.json')]; require('package.json')
quando querem recarregar?Existe outra maneira de buscar certas informações do seu
package.json
arquivo, usando o módulo pkginfo .O uso deste módulo é muito simples. Você pode obter todas as variáveis de pacote usando:
Ou apenas alguns detalhes (
version
neste caso)E suas variáveis de pacote serão definidas como
module.exports
(para que o número da versão seja acessível viamodule.exports.version
).Você pode usar o seguinte trecho de código:
Este módulo possui um recurso muito interessante - ele pode ser usado em qualquer arquivo do seu projeto (por exemplo, em subpastas) e buscará automaticamente as informações do seu projeto.
package.json
. Então você não precisa se preocupar ondepackage.json
está.Espero que ajude.
fonte
module
aqui?module
não é essa variável de exemplo específica; é uma variável que representa o módulo atual em node.js. Você pode ler mais sobre os módulos node.js. aqui: nodejs.org/api/modules.html#modules_the_module_objectPara aqueles que procuram uma solução segura do lado do cliente que também funcione no lado do servidor, existe uma genversão . É uma ferramenta de linha de comando que lê a versão do package.json mais próximo e gera um arquivo de módulo CommonJS importável que exporta a versão. Disclaimer: Eu sou um mantenedor.
Reconheço que a segurança do cliente não era a intenção principal do OP, mas, como discutido nas respostas de Mark Wallace e agosto , é altamente relevante e também o motivo pelo qual encontrei essas perguntas e respostas.
fonte
Apenas adicionando uma resposta porque cheguei a esta pergunta para ver a melhor maneira de incluir a versão do package.json no meu aplicativo da web.
Sei que esta pergunta é direcionada para o Node.js, no entanto, se você estiver usando o Webpack para agrupar seu aplicativo, apenas um lembrete, a maneira recomendada é usar o DefinePlugin para declarar uma versão global na configuração e fazer referência a isso. Então você poderia fazer no seu
webpack.config.json
E
AppVersion
agora é um global que está disponível para você usar. Também certifique-se de que.eslintrc
você ignora isso através do suporte globalfonte
Opção 1
A melhor prática é fazer a versão do package.json usando variáveis de ambiente npm.
mais informações em: https://docs.npmjs.com/using-npm/config.html
Isso funcionará apenas quando você iniciar o serviço usando o comando NPM.
opção 2
Configurando a versão na variável de ambiente usando https://www.npmjs.com/package/dotenv como
.env
arquivo e em relação aprocess.env.version
fonte
Você pode usar o ES6 para importar o package.json para recuperar o número da versão e gerar a versão no console.
fonte
Para determinar a versão do pacote no código do nó, você pode usar o seguinte:
const version = require('./package.json').version;
para <versões ES6import {version} from './package.json';
para versão ES6const version = process.env.npm_package_version;
se o aplicativo foi iniciadonpm start
, todas as variáveis de ambiente npm_ * ficam disponíveis.Você também pode usar os seguintes pacotes npm - root-require, pkginfo, project-version.
fonte
Você pode usar o pacote de versão do projeto .
Então
Ele usa
process.env.npm_package_version
mas fallback na versão escritapackage.json
no caso do env var estar ausente por algum motivo.fonte
Por que não usar a resolução requerida ...
Com essa abordagem, trabalhe para todos os subcaminhos :)
fonte
Eu faço isso com
findup-sync
:fonte
package.json
, semelhante aprocess.env.npm_package_version
além de não exigir que fosse iniciado via npm. Portanto, tentar obter a versão da sua biblioteca realmente obteria a versão do chamador. Um simples requerimento ('./ package.json') evitaria isso.Sei que essa não é a intenção do OP, mas eu apenas precisei fazer isso, por isso espero que ajude a próxima pessoa.
Se você estiver usando o docker-composite para o seu processo de CI / CD, poderá obtê-lo dessa maneira!
para a imagem, você pode usar qualquer imagem de nó. Eu uso alpino porque é o menor.
fonte
Importar seu
package.json
arquivo em seuserver.js
ouapp.js
e, em seguida, propriedades de acesso package.json em arquivos do servidor.A variável package contém todos os dados em package.json.
fonte
Criei um código útil para obter o package.json do módulo pai
fonte
Se estiver usando rollup, o
rollup-plugin-replace
plug - in pode ser usado para adicionar a versão sem expor package.json ao cliente.Em seguida, no código-fonte, em qualquer lugar onde você deseja ter a versão package.json, você usaria a string 'MY_PACKAGE_JSON_VERSION'.
fonte