Gibt es eine Möglichkeit, die package.json
in einer NodeJS-App festgelegte Version zu erhalten ? Ich würde so etwas wollen
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
quelle
quelle
console.log(process.version)
Antworten:
Ich fand, dass das folgende Codefragment für mich am besten funktioniert. Da es
require
zum Laden von verwendet wirdpackage.json
, funktioniert es unabhängig vom aktuellen Arbeitsverzeichnis.Eine Warnung mit freundlicher Genehmigung von @Pathogen:
quelle
require('root-require')('package.json').version
Error: Cannot find module 'package.json'
.Wenn Ihre Anwendung mit 'npm start' gestartet wird, können Sie einfach Folgendes verwenden:
Weitere Informationen finden Sie unter package.json vars .
quelle
npm run …
) befindet sich die Version in der Umgebungsvariablen$npm_package_version
.npm start
, aber nicht in einer gebauten Elektronen-App: Dafür finden Sie es inapp.getVersion
.Mit ES6-Modulen können Sie Folgendes tun:
quelle
Oder in einfacher alter Schale:
Dies kann auf verkürzt werden
Auch wenn dies nicht genau das ist, was die Frage gestellt hat, ist es nützlich, wenn Sie die Version in sich
package.json
selbst verwenden möchten , z. B. um sich bei einer versionierten Datei in einem Protokoll anzumeldenscript
:quelle
Es gibt zwei Möglichkeiten, die Version abzurufen:
package.json
Version anfordern und abrufen :Bitte verwenden Sie nicht
JSON.parse
,fs.readFile
,fs.readFileSync
und das andere tun nicht verwendennpm modules
es für diese Frage nicht notwendig ist.quelle
npm_*
Umgebungswerte nur verfügbar, wenn Ihr Skript von NPM gestartet wurde, znpm start
. Wenn Sie dies tunnode app.js
oder ähnliches, sind sie nicht vorhanden.package.json
?So lesen Sie die Version aus package.json:
quelle
require() introduces? (for instance, does
erfordern , dass () das Lesen von utf8 nicht unterstützt? wie Ihr Ausschnitt vermuten lässt)require()
speichert die Datei zwischen, was in diesem Fall keinen Unterschied machen sollte.JSON.parse(fs.readFileSync('package.json', 'utf8'))
anstattdelete require.cache[require.resolve('package.json')]; require('package.json')
wann sie neu laden möchten?Es gibt eine andere Möglichkeit, bestimmte Informationen von Ihrem abzurufen
package.json
Datei abzurufen, nämlich das pkginfo- Modul.Die Verwendung dieses Moduls ist sehr einfach. Sie können alle Paketvariablen abrufen mit:
Oder nur bestimmte Details (
version
in diesem Fall)Und Ihre Paketvariablen werden auf gesetzt
module.exports
(so dass die Versionsnummer über zugänglich istmodule.exports.version
).Sie können das folgende Codefragment verwenden:
Dieses Modul hat eine sehr schöne Funktion - es kann in jeder Datei in Ihrem Projekt verwendet werden (z. B. in Unterordnern) und ruft automatisch Informationen von Ihrem ab
package.json
. Sie müssen sich also keine Sorgen machen, wo Siepackage.json
sind.Ich hoffe das wird helfen.
quelle
module
hiermodule
ist nicht diese spezifische Beispielvariable; Es ist eine Variable, die das aktuelle Modul in node.js darstellt. Weitere Informationen zuFür diejenigen, die nach einer sicheren clientseitigen Lösung suchen , die auch serverseitig funktioniert, gibt es eine Genversion . Es ist ein Befehlszeilentool, das die Version aus der nächsten package.json liest und eine importierbare CommonJS-Moduldatei generiert, die die Version exportiert. Haftungsausschluss: Ich bin ein Betreuer.
Ich erkenne an, dass die clientseitige Sicherheit nicht die primäre Absicht von OP war, aber wie in den Antworten von Mark Wallace und aug erörtert , ist sie von hoher Relevanz und auch der Grund, warum ich diese Fragen und Antworten gefunden habe.
quelle
Ich habe nur eine Antwort hinzugefügt, weil ich auf diese Frage gekommen bin, um herauszufinden, wie ich die Version von package.json am besten in meine Webanwendung aufnehmen kann.
Ich weiß, dass diese Frage für Node.js bestimmt ist. Wenn Sie jedoch Webpack verwenden, um Ihre App zu bündeln, wird nur empfohlen, das DefinePlugin zu verwenden, um eine globale Version in der Konfiguration zu deklarieren und darauf zu verweisen. So könnten Sie in Ihrem tun
webpack.config.json
Und dann
AppVersion
steht Ihnen jetzt ein Global zur Verfügung. Stellen Sie außerdem sicher, dass.eslintrc
Sie dies über die globale Requisite ignorierenquelle
Option 1
Die beste Vorgehensweise ist die Versionierung von package.json unter Verwendung von npm-Umgebungsvariablen.
Weitere Informationen unter: https://docs.npmjs.com/using-npm/config.html
Dies funktioniert nur, wenn Sie Ihren Dienst mit dem NPM-Befehl starten.
Option 2
Festlegen der Version in der Umgebungsvariablen mithilfe von https://www.npmjs.com/package/dotenv als
.env
Datei und in Bezug auf inprocess.env.version
quelle
Mit ES6 können Sie package.json importieren, um die Versionsnummer abzurufen und die Version auf der Konsole auszugeben.
quelle
Um die Paketversion im Knotencode zu bestimmen, können Sie Folgendes verwenden:
const version = require('./package.json').version;
für <ES6-Versionenimport {version} from './package.json';
für ES6-Versionconst version = process.env.npm_package_version;
Wenn die Anwendung mit gestartet wurdenpm start
, werden alle Umgebungsvariablen npm_ * verfügbar.Sie können auch die folgenden npm-Pakete verwenden - root-require, pkginfo, project-version.
quelle
Sie können das Projektversionspaket verwenden .
Dann
Es verwendet
process.env.npm_package_version
aber einen Fallback auf die Version, die in dempackage.json
Fall geschrieben wurde, falls die env var aus irgendeinem Grund fehlt.quelle
Ich mache das mit
findup-sync
:quelle
package.json
, ähnlich wieprocess.env.npm_package_version
außerdem, dass es nicht über npm gestartet werden muss. Wenn Sie also versuchen, Ihre Bibliotheksversion zu erhalten, erhalten Sie tatsächlich die Version des Anrufers. Eine einfache Anforderung ('./ package.json') würde dies vermeiden.Ich weiß, dass dies nicht die Absicht des OP ist, aber ich musste dies nur tun, also hoffe, es hilft der nächsten Person.
Wenn Sie Docker-Compose für Ihren CI / CD-Prozess verwenden, können Sie dies auf diese Weise erreichen!
Für das Bild können Sie ein beliebiges Knotenbild verwenden. Ich benutze alpine, weil es das kleinste ist.
quelle
Warum nicht die erforderliche Auflösung verwenden ...
Mit diesem Ansatz arbeiten für alle Unterpfade :)
quelle
Importieren Sie Ihre
package.json
Datei in Ihreserver.js
oderapp.js
und greifen Sie dann auf die Eigenschaften package.json in die Serverdatei zu.Die Paketvariable enthält alle Daten in package.json.
quelle
Ich habe einen nützlichen Code erstellt, um die package.json des übergeordneten Moduls abzurufen
quelle
Wenn Sie Rollup verwenden, kann das
rollup-plugin-replace
Plugin verwendet werden, um die Version hinzuzufügen, ohne package.json für den Client verfügbar zu machen.Dann würden Sie im Quellcode überall dort, wo Sie die package.json-Version haben möchten, die Zeichenfolge 'MY_PACKAGE_JSON_VERSION' verwenden.
quelle