¿Hay alguna manera de configurar la versión package.json
en una aplicación de nodejs? Quisiera 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
node.js
npm
version
versioning
Abhik Bose Pramanik
fuente
fuente
console.log(process.version)
Respuestas:
Descubrí que el siguiente fragmento de código funcionó mejor para mí. Como se usa
require
para cargarpackage.json
, funciona independientemente del directorio de trabajo actual.Una advertencia, cortesía de @Pathogen:
fuente
require('root-require')('package.json').version
Error: Cannot find module 'package.json'
.Si su aplicación se inicia con 'npm start', simplemente puede usar:
Ver package.json vars para más detalles.
fuente
npm run …
) la versión estará en la variable de entorno$npm_package_version
.npm start
, pero no dentro de una aplicación electrónica integrada: para eso, puede encontrarla enapp.getVersion
.Con los módulos ES6 puede hacer lo siguiente:
fuente
O en la vieja cáscara simple:
Esto se puede acortar a
A pesar de que esto no es exactamente lo que hizo la pregunta, es útil si desea utilizar la versión dentro de
package.json
sí misma, por ejemplo, para iniciar sesión en un archivo versionado enscript
:fuente
Hay dos formas de recuperar la versión:
package.json
y obtener la versión:Por favor, no use
JSON.parse
,fs.readFile
,fs.readFileSync
y no utilice otranpm modules
que no es necesario para esta pregunta.fuente
npm_*
los valores del entorno solo están disponibles si NPM inició su script, por ejemplonpm start
. Si lo estás haciendonode app.js
o similar, no estarán presentes.package.json
?Aquí se explica cómo leer la versión de package.json:
fuente
require() introduces? (for instance, does
requieren () `no admitir la lectura utf8? como su fragmento puede sugerir)require()
almacena en caché el archivo, que en este caso no debería hacer la diferencia.JSON.parse(fs.readFileSync('package.json', 'utf8'))
lugar dedelete require.cache[require.resolve('package.json')]; require('package.json')
cuando quieren recargar?Hay otra forma de obtener cierta información de su
package.json
archivo, es decir, utilizando el módulo pkginfo .El uso de este módulo es muy simple. Puede obtener todas las variables del paquete usando:
O solo ciertos detalles (
version
en este caso)Y las variables de su paquete se establecerán en
module.exports
(para que se pueda acceder al número de versión a través demodule.exports.version
).Puede usar el siguiente fragmento de código:
Este módulo tiene una característica muy buena: se puede usar en cualquier archivo de su proyecto (por ejemplo, en subcarpetas) y obtendrá información automáticamente de su archivo
package.json
. Para que no tenga que preocuparse de dóndepackage.json
está.Espero que le ayudará.
fuente
module
aquimodule
no es esta variable de ejemplo específica; Es una variable que representa el módulo actual en node.js. Puede leer más sobre los módulos node.js aquí: nodejs.org/api/modules.html#modules_the_module_objectPara aquellos que buscan una solución segura del lado del cliente que también funcione en el lado del servidor, existe la genversion . Es una herramienta de línea de comandos que lee la versión desde el package.json más cercano y genera un archivo de módulo CommonJS importable que exporta la versión. Descargo de responsabilidad: soy un mantenedor.
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 muy relevante y también la razón por la que encontré estas preguntas y respuestas.
fuente
Solo agregué una respuesta porque llegué a esta pregunta para ver la mejor manera de incluir la versión de package.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 DefinePlugin para declarar una versión global en la configuración y hacer referencia a eso. Entonces podrías hacer en tu
webpack.config.json
Y
AppVersion
ahora es un global que está disponible para su uso. También asegúrese de.eslintrc
ignorar esto a través del accesorio globalfuente
Opción 1
La mejor práctica es versionar desde package.json usando variables de entorno npm.
Más información sobre: https://docs.npmjs.com/using-npm/config.html
Esto funcionará solo cuando inicie su servicio utilizando el comando NPM.
opcion 2
Configuración de la versión en la variable de entorno usando https://www.npmjs.com/package/dotenv como
.env
archivo y considérelo enprocess.env.version
fuente
Puede usar ES6 para importar package.json para recuperar el número de versión y generar la versión en la consola.
fuente
Para determinar la versión del paquete en el código de nodo, puede usar lo siguiente:
const version = require('./package.json').version;
para <versiones ES6import {version} from './package.json';
para la versión ES6const version = process.env.npm_package_version;
Si la aplicación se ha comenzado a utilizarnpm start
, todas las variables de entorno npm_ * estarán disponibles.También puede usar los siguientes paquetes npm: root-require, pkginfo, project-version.
fuente
Puede usar el paquete de versión del proyecto .
Entonces
Utiliza
process.env.npm_package_version
pero retrocede en la versión escrita en elpackage.json
caso de que la var env desaparezca por alguna razón.fuente
¿Por qué no utilizar la resolución requerida?
Con este enfoque, trabaje para todas las rutas secundarias :)
fuente
Hago esto con
findup-sync
:fuente
package.json
, similar aprocess.env.npm_package_version
además de no requerir que se inicie a través de npm. Por lo tanto, tratar de obtener la versión de su biblioteca realmente obtendría la versión de la persona que llama. Un simple requerimiento ('./ package.json') evitaría esto.Sé que esta no es la intención del OP, pero solo tenía que hacer esto, así que espero que ayude a la siguiente persona.
Si está utilizando docker-compose para su proceso de CI / CD, ¡puede obtenerlo de esta manera!
para la imagen, puede usar cualquier imagen de nodo. Yo uso alpino porque es el más pequeño.
fuente
Importe su
package.json
archivo en suserver.js
oapp.js
y luego acceda a las propiedades de package.json en el archivo del servidor.La variable del paquete contiene todos los datos en package.json.
fuente
Hice un código útil para obtener el paquete del módulo principal.json
fuente
Si usa el paquete acumulativo, el
rollup-plugin-replace
complemento se puede usar para agregar la versión sin exponer package.json al cliente.Luego, en el código fuente, en cualquier lugar donde desee tener la versión package.json, usaría la cadena 'MY_PACKAGE_JSON_VERSION'.
fuente