Apakah ada cara untuk mendapatkan versi yang ditetapkan di package.json
aplikasi nodejs? Saya ingin sesuatu seperti ini
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
sumber
sumber
console.log(process.version)
Jawaban:
Saya menemukan bahwa fragmen kode berikut bekerja paling baik untuk saya. Karena digunakan
require
untuk memuatpackage.json
, ia berfungsi terlepas dari direktori kerja saat ini.Peringatan, milik @ Patogen:
sumber
require('root-require')('package.json').version
Error: Cannot find module 'package.json'
.Jika aplikasi Anda diluncurkan dengan 'npm start', Anda cukup menggunakan:
Lihat package.json vars untuk lebih jelasnya.
sumber
npm run …
) versi akan berada dalam variabel lingkungan$npm_package_version
.npm start
, tetapi tidak di dalam aplikasi elektron yang dibangun: untuk itu, Anda dapat menemukannya diapp.getVersion
.Menggunakan modul ES6 Anda dapat melakukan hal berikut:
sumber
Atau di shell tua polos:
Ini dapat disingkat menjadi
Meskipun ini bukan pertanyaan yang diajukan, ada baiknya jika Anda ingin menggunakan versi
package.json
itu sendiri, misalnya untuk masuk ke file versi discript
:sumber
Ada dua cara untuk mengambil versi:
package.json
dan mendapatkan versi:Jangan gunakan
JSON.parse
,fs.readFile
,fs.readFileSync
dan jangan gunakan laginpm modules
itu tidak perlu untuk pertanyaan ini.sumber
npm_*
nilai lingkungan hanya tersedia jika skrip Anda dimulai oleh NPM, misnpm start
. Jika Anda melakukannode app.js
atau serupa, mereka tidak akan hadir.package.json
?Berikut ini cara membaca versi out dari package.json:
sumber
require() introduces? (for instance, does
mengharuskan () `tidak mendukung bacaan utf8? seperti yang mungkin disarankan cuplikan Anda)require()
cache file, yang dalam hal ini seharusnya tidak membuat perbedaan.JSON.parse(fs.readFileSync('package.json', 'utf8'))
alih - alihdelete require.cache[require.resolve('package.json')]; require('package.json')
ketika mereka ingin memuat ulang?Ada cara lain untuk mengambil informasi tertentu dari
package.json
file Anda yaitu menggunakan modul pkginfo .Penggunaan modul ini sangat sederhana. Anda bisa mendapatkan semua variabel paket menggunakan:
Atau hanya detail tertentu (
version
dalam hal ini)Dan variabel paket Anda akan diatur ke
module.exports
(sehingga nomor versi akan dapat diakses melaluimodule.exports.version
).Anda dapat menggunakan potongan kode berikut:
Modul ini memiliki fitur yang sangat bagus - dapat digunakan dalam file apa pun di proyek Anda (misalnya dalam subfolder) dan secara otomatis akan mengambil informasi dari Anda
package.json
. Jadi Anda tidak perlu khawatir di mana Andapackage.json
berada.Saya harap itu akan membantu.
sumber
module
disinimodule
bukan variabel contoh spesifik ini; itu adalah variabel yang mewakili modul saat ini di node.js. Anda dapat membaca lebih lanjut tentang modul node.js di sini: nodejs.org/api/modules.html#modules_the_module_objectBagi mereka yang mencari solusi sisi-klien yang aman yang juga berfungsi di sisi-server, ada genversi . Ini adalah alat baris perintah yang membaca versi dari package.json terdekat dan menghasilkan file modul CommonJS yang dapat diimpor yang mengekspor versi. Penafian: Saya seorang pengelola.
Saya mengakui keselamatan sisi klien bukan tujuan utama OP, tetapi seperti yang dibahas dalam jawaban oleh Mark Wallace dan Agustus , itu sangat relevan dan juga alasan saya menemukan T&J ini.
sumber
Hanya menambahkan jawaban karena saya datang ke pertanyaan ini untuk melihat cara terbaik untuk memasukkan versi dari package.json dalam aplikasi web saya.
Saya tahu pertanyaan ini ditujukan untuk Node.js, namun, jika Anda menggunakan Webpack untuk menggabungkan aplikasi Anda hanya pengingat cara yang disarankan adalah dengan menggunakan DefinePlugin untuk mendeklarasikan versi global dalam konfigurasi dan referensi itu. Jadi Anda bisa melakukannya di
webpack.config.json
Dan
AppVersion
sekarang ada global yang tersedia untuk Anda gunakan. Pastikan juga.eslintrc
Anda mengabaikannya melalui global propsumber
Pilihan 1
Praktik terbaik adalah versi dari package.json menggunakan variabel lingkungan npm.
informasi lebih lanjut tentang: https://docs.npmjs.com/using-npm/config.html
Ini akan berfungsi hanya ketika Anda memulai layanan Anda menggunakan perintah NPM.
pilihan 2
Mengatur versi dalam variabel lingkungan menggunakan https://www.npmjs.com/package/dotenv sebagai
.env
file dan mengikutinya dalamprocess.env.version
sumber
Anda dapat menggunakan ES6 untuk mengimpor package.json untuk mengambil nomor versi dan mengeluarkan versi pada konsol.
sumber
Untuk menentukan versi paket dalam kode simpul, Anda dapat menggunakan yang berikut ini:
const version = require('./package.json').version;
untuk versi <ES6import {version} from './package.json';
untuk versi ES6const version = process.env.npm_package_version;
jika aplikasi telah mulai digunakannpm start
, semua variabel lingkungan npm_ * menjadi tersedia.Anda dapat menggunakan paket npm berikut juga - root-need, pkginfo, versi proyek.
sumber
Anda dapat menggunakan paket versi proyek .
Kemudian
Ia menggunakan
process.env.npm_package_version
tetapi mundur pada versi yang ditulispackage.json
dalam jika env var hilang karena beberapa alasan.sumber
Mengapa tidak menggunakan yang memerlukan tekad ...
Dengan pendekatan ini bekerja untuk semua sub jalur :)
sumber
Saya melakukan ini dengan
findup-sync
:sumber
package.json
, mirip denganprocess.env.npm_package_version
selain tidak memerlukannya untuk dimulai melalui npm. Jadi mencoba mendapatkan versi perpustakaan Anda sebenarnya akan mendapatkan versi pemanggil. Persyaratan sederhana ('./ package.json') akan menghindari ini.Saya tahu ini bukan maksud OP, tapi saya hanya harus melakukan ini, jadi harap itu membantu orang berikutnya.
Jika Anda menggunakan docker-compose untuk proses CI / CD Anda, Anda bisa mendapatkannya dengan cara ini!
untuk gambar, Anda dapat menggunakan gambar simpul apa pun. Saya menggunakan alpine karena itu adalah yang terkecil.
sumber
Impor Anda
package.json
file ke Andaserver.js
atauapp.js
dan kemudian akses properti package.json ke dalam file server yang.variabel paket berisi semua data di package.json.
sumber
Saya membuat kode yang berguna untuk mendapatkan package.json modul induk
sumber
Jika menggunakan rollup,
rollup-plugin-replace
plugin dapat digunakan untuk menambahkan versi tanpa mengekspos package.json ke klien.Kemudian, dalam kode sumber, di mana pun Anda ingin memiliki versi package.json, Anda akan menggunakan string 'MY_PACKAGE_JSON_VERSION'.
sumber