Hay una manera de obtener la versión del paquete.json en código nodejs?


¿Hay alguna manera de obtener la versión establecida en package.json en una aplicación nodejs? Me gustaría algo como esto

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
Author: Patrick Scott, 2012-02-06

14 answers

Descubrí que el siguiente fragmento de código funcionaba mejor para mí. Ya que utiliza 'require' para cargar el paquete.json, funciona independientemente del directorio de trabajo actual.

var pjson = require('./package.json');
console.log(pjson.version);

Una advertencia, cortesía de @ Pathogen:

Hacer esto con browserify tiene implicaciones de seguridad.
Tenga cuidado de no exponer su paquete.json al cliente, ya que significa que todos los números de versión de la dependencia, los comandos de compilación y prueba y más se envían al cliente.
Si estás construyendo servidor y cliente en el mismo proyecto, también expone sus números de versión del lado del servidor.
Estos datos específicos pueden ser utilizados por un atacante para adaptarse mejor al ataque de su servidor.

 727
Author: Mark Wallace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-09 08:55:52

Si su aplicación se inicia con 'npm start', simplemente puede usar:

process.env.npm_package_version

Ver paquete.json vars para más detalles.

 221
Author: Julien Christin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-05 18:28:25

Usando los módulos ES6 puedes hacer lo siguiente:

import {version} from './package.json';
 89
Author: Patrick Scott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-20 03:24:09

O en la cáscara vieja llana:

node -e "console.log(require('./package.json').version);"

Esto se puede acortar a

node -p "require('./package.json').version"

Aunque esto no es exactamente lo que hace la pregunta, es útil si desea usar la versión dentro de package.json, por ejemplo, para iniciar sesión en un archivo versionado en un script:

{
  "name": "myapp",
  "version": "0.1.2",
  "scripts": {
    "run": "node index.js 2>&1 | tee -a myapp_v$(node -p \"require('./package.json').version\").log",
  ...
}
 49
Author: abernier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-08 16:14:43

Aquí está cómo leer la versión del paquete.json:

fs = require('fs')
json = JSON.parse(fs.readFileSync('package.json', 'utf8'))
version = json.version
 30
Author: Evan Moran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-21 00:27:11

Las respuestas correctas estarán aquí en el ejemplo:

  1. Respuesta (este código incluye package.json archivo y obtener versión)

    const { version } = require('./package.json');


  1. Respuesta

    const version = process.env.npm_package_version


Por favor, no use JSON.parse, fs.readFile, fs.readFileSync y no uses otro npm modules no es necesario para esta pregunta.

 21
Author: аlex dykyі,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-20 13:11:55

Hay otra forma de obtener cierta información de su archivo package.json a saber, utilizando pkginfo módulo.

El uso de este módulo es muy simple. Puede obtener todas las variables de paquete usando:

require('pkginfo')(module);

O solo ciertos detalles (version en este caso)

require('pkginfo')(module, 'version');

Y sus variables de paquete se establecerán en module.exports (por lo que el número de versión será accesible a través de module.exports.version).

Puedes usar el siguiente fragmento de código:

require('pkginfo')(module, 'version');
console.log "Express server listening on port %d in %s mode %s", app.address().port, app.settings.env, module.exports.version

Este módulo tiene muy característica-se puede usar en cualquier archivo de su proyecto (por ejemplo, en subcarpetas) y automáticamente obtendrá información de su package.json. Así que no tienes que preocuparte de dónde estás package.json.

Espero que eso ayude.

 19
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-05 15:50:34

Simplemente agregando una respuesta porque llegué a esta pregunta para ver la mejor manera de incluir la versión del paquete.json en mi aplicación web.

Sé que esta pregunta está dirigida a Node.js sin embargo, si está utilizando Webpack para agrupar su aplicación solo un recordatorio, la forma recomendada es usar el DefinePlugin para declarar una versión global en la configuración y referenciarla. Así que usted podría hacer en su webpack.config.json

const pkg = require('../../package.json');

...

plugins : [
    new webpack.DefinePlugin({
      AppVersion: JSON.stringify(pkg.version),
...

Y luego AppVersion es ahora un global que está disponible para que utilizar. También asegúrese de que en su .eslintrc ignore esto a través de la prop globals

 7
Author: aug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-18 20:21:00

Para aquellos que buscan una solución segura del lado del cliente que también funcione en el lado del servidor, existe genversion. Es una herramienta de línea de comandos que lee la versión del paquete más cercano.json y genera un archivo de módulo CommonJS importable que exporta la versión. Descargo de responsabilidad: Soy un mantenedor.

$ genversion lib/version.js

Reconozco que la seguridad del lado del cliente no era la intención principal de OP, pero como se discutió en las respuestas de Mark Wallace y aug , es altamente relevante y también la razón por la que encontré este Q&A.

 7
Author: Akseli Palén,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-05 09:44:08

Puede usar el paquete project-version.

$ npm install --save project-version

Entonces

const version = require('project-version');

console.log(version);
//=>  '1.0.0'

Utiliza process.env.npm_package_version pero reserva en la versión escrita en el package.json en caso de que el env var falta por alguna razón.

 2
Author: simonepri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-02 09:13:17

Hago esto con findup-sync:

var findup = require('findup-sync');
var packagejson = require(findup('package.json'));
console.log(packagejson.version); // => '0.0.1' 
 1
Author: Luca Bonavita,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-18 15:15:18

Sé que esta no es la intención de la operación, pero solo tenía que hacer esto, así que espero que ayude a la siguiente persona.

Si está utilizando docker-compose para su proceso CI / CD, ¡puede obtenerlo de esta manera!

version:
  image: node:7-alpine
  volumes:
    - .:/usr/src/service/
  working_dir: /usr/src/service/
  command: ash -c "node -p \"require('./package.json').version.replace('\n', '')\""

Para la imagen, puede usar cualquier imagen de nodo. Uso alpine porque es el más pequeño.

 1
Author: Patrick Scott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-09 18:01:15

Importe su archivo package.json en su server.js o app.js y luego acceda al paquete.propiedades json en el archivo del servidor.

var package = require('./package.json');

La variable Package contiene todos los datos del paquete.json.

 0
Author: Patharraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-01 07:31:49

¿Por qué no usar la forma nativa? los otros métodos han fallado para mí.

// Load native UI library
var gui = require('nw.gui');

// Get the name field in manifest
gui.App.manifest.version
 -9
Author: vivvvi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-23 19:27:06