Czy istnieje sposób na ustawienie wersji w package.json
aplikacji nodejs? Chciałbym czegoś takiego
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
źródło
źródło
console.log(process.version)
Odpowiedzi:
Odkryłem, że następujący fragment kodu działa najlepiej dla mnie. Ponieważ używa
require
do ładowaniapackage.json
, działa niezależnie od bieżącego katalogu roboczego.Ostrzeżenie, dzięki uprzejmości @Pathogen:
źródło
require('root-require')('package.json').version
Error: Cannot find module 'package.json'
.Jeśli twoja aplikacja jest uruchomiona z „npm start”, możesz po prostu użyć:
Aby uzyskać więcej informacji, zobacz vars package.json .
źródło
npm run …
) wersja będzie w zmiennej środowiskowej$npm_package_version
.npm start
, ale nie w wbudowanej aplikacji elektronowej: w tym celu można ją znaleźć wapp.getVersion
.Za pomocą modułów ES6 możesz wykonać następujące czynności:
źródło
Lub w zwykłej starej powłoce:
Można to skrócić
Chociaż nie jest to dokładnie to, o co pytano, jest przydatne, jeśli chcesz użyć wersji w
package.json
sobie, na przykład zalogować się do pliku w wersji wscript
:źródło
Istnieją dwa sposoby pobrania wersji:
package.json
i uzyskanie wersji:Proszę nie używać
JSON.parse
,fs.readFile
,fs.readFileSync
i nie używać innegonpm modules
nie jest to konieczne dla tej kwestii.źródło
npm_*
wartości środowiskowe są dostępne tylko wtedy, gdy skrypt został rozpoczęty przez KMP, npnpm start
. Jeśli to robisznode app.js
lub coś podobnego, nie będą one obecne.package.json
?Oto jak odczytać wersję z pliku package.json:
źródło
require() introduces? (for instance, does
wymagają () `nie obsługi odczytu utf8? jak może sugerować Twój fragment)require()
buforuje plik, co w tym przypadku nie powinno mieć znaczenia.JSON.parse(fs.readFileSync('package.json', 'utf8'))
zamiastdelete require.cache[require.resolve('package.json')]; require('package.json')
kiedy chcą ponownie załadować?Istnieje inny sposób pobierania niektórych informacji z
package.json
pliku, a mianowicie użycie modułu pkginfo .Korzystanie z tego modułu jest bardzo proste. Możesz pobrać wszystkie zmienne pakietu, używając:
Lub tylko niektóre szczegóły (
version
w tym przypadku)Zmienne pakietu zostaną ustawione na
module.exports
(więc numer wersji będzie dostępny za pośrednictwemmodule.exports.version
).Możesz użyć następującego fragmentu kodu:
Moduł ma bardzo fajną funkcję - można go użyć w dowolnym pliku w projekcie (np. W podfolderach) i automatycznie pobierze informacje z twojego
package.json
. Więc nie musisz się martwić, gdzie jesteśpackage.json
.Mam nadzieję, że to pomoże.
źródło
module
tu jestmodule
nie jest tą konkretną przykładową zmienną; jest to zmienna reprezentująca bieżący moduł w node.js. Możesz przeczytać więcej o modułach node.js tutaj: nodejs.org/api/modules.html#modules_the_module_objectDla tych, którzy szukają bezpiecznego rozwiązania po stronie klienta , które działa również po stronie serwera, istnieje genversion . Jest to narzędzie wiersza polecenia, które odczytuje wersję z najbliższego package.json i generuje importowalny plik modułu CommonJS, który eksportuje wersję. Oświadczenie: Jestem opiekunem.
Uznaję bezpieczeństwo po stronie klienta nie był pierwotny zamiar OP, ale jak wspomniano w odpowiedzi przez Mark Wallace i sie , to jest bardzo istotne, a także powód Znalazłem Q & A.
źródło
Właśnie dodając odpowiedź, ponieważ przyszedłem do tego pytania, aby zobaczyć najlepszy sposób na dołączenie wersji z package.json do mojej aplikacji internetowej.
Wiem, że to pytanie jest skierowane do Node.js, ale jeśli używasz Webpacka do spakowania aplikacji jako przypomnienie, zalecanym sposobem jest użycie DefinePlugin do zadeklarowania wersji globalnej w konfiguracji i odwołanie się do tego. Więc możesz zrobić w swoim
webpack.config.json
A potem
AppVersion
jest teraz globalny, który jest dostępny do użycia. Upewnij się także,.eslintrc
że zignorujesz to poprzez rekwizyt globalsźródło
opcja 1
Najlepszą praktyką jest wersja z package.json przy użyciu zmiennych środowiskowych npm.
więcej informacji na: https://docs.npmjs.com/using-npm/config.html
Działa to tylko po uruchomieniu usługi za pomocą polecenia NPM.
Opcja 2
Ustawianie wersji w zmiennej środowiskowej za pomocą https://www.npmjs.com/package/dotenv jako
.env
pliku i uwzględnianie jej wprocess.env.version
źródło
Za pomocą ES6 można zaimportować pakiet.json w celu pobrania numeru wersji i wypisania wersji na konsolę.
źródło
Aby ustalić wersję pakietu w kodzie węzła, możesz użyć następujących opcji:
const version = require('./package.json').version;
dla wersji <ES6import {version} from './package.json';
dla wersji ES6const version = process.env.npm_package_version;
jeśli aplikacja została uruchomiona przy użyciunpm start
, wszystkie zmienne środowiskowe npm_ * stają się dostępne.Możesz także użyć następujących pakietów npm - root-demand, pkginfo, wersja projektu.
źródło
Możesz użyć pakietu wersji projektu .
Następnie
Używa,
process.env.npm_package_version
ale zastępuje wersję napisanąpackage.json
w przypadku, gdy z jakiegoś powodu brakuje zmiennej env var.źródło
Robię to z
findup-sync
:źródło
package.json
, podobnie jakprocess.env.npm_package_version
poza tym, że nie wymagałby, aby był uruchamiany przez npm. Tak więc próba uzyskania wersji biblioteki faktycznie dostałaby wersję osoby dzwoniącej. Proste wymaganie („./ package.json”) uniknęłoby tego.Wiem, że to nie jest cel PO, ale musiałem to zrobić, więc mam nadzieję, że pomoże to następnej osobie.
Jeśli używasz komponowania dokującego do procesu CI / CD, możesz to zrobić w ten sposób!
dla obrazu możesz użyć dowolnego obrazu węzła. Używam alpine, ponieważ jest najmniejsza.
źródło
Dlaczego nie użyć wymagającego rozwiązania ...
Dzięki takiemu podejściu działa dla wszystkich ścieżek podrzędnych :)
źródło
Zaimportuj
package.json
plik do plikuserver.js
lub,app.js
a następnie uzyskaj dostęp do właściwości package.json do pliku serwera.zmienna pakietu zawiera wszystkie dane w pliku package.json.
źródło
Zrobiłem użyteczny kod, aby uzyskać pakiet.json modułu nadrzędnego
źródło
Jeśli używasz pakietu zbiorczego,
rollup-plugin-replace
wtyczki można użyć do dodania wersji bez ujawniania pliku package.json klientowi.Następnie w kodzie źródłowym, gdziekolwiek chcesz mieć wersję package.json, użyjesz ciągu „MY_PACKAGE_JSON_VERSION”.
źródło