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
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.
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.
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';
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",
...
}
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
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:
-
Respuesta (este código incluye
package.json
archivo y obtener versión)const { version } = require('./package.json');
-
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.
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.
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
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.
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.
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'
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.
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.
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
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