767

package.jsonnodejsアプリでバージョンセットを取得する方法はありますか? 私はこのようなものが欲しいだろう

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
4

27 に答える 27

1171

次のコード フラグメントが最適であることがわかりました。requireをロードするために使用するためpackage.json、現在の作業ディレクトリに関係なく機能します。

var pjson = require('./package.json');
console.log(pjson.version);

@Pathogenの厚意による警告:

これを Browserify で行うと、セキュリティに影響があります。
をクライアントに公開しないように注意してください。package.jsonこれは、すべての依存関係のバージョン番号、ビルドおよびテスト コマンドなどがクライアントに送信されることを意味するためです。
サーバーとクライアントを同じプロジェクトで構築している場合は、サーバー側のバージョン番号も公開します。このような特定のデータは、攻撃者がサーバーへの攻撃により適したものにするために使用できます。

于 2012-06-01T17:51:37.653 に答える
553

アプリケーションが で起動された場合はnpm start、次を使用できます。

process.env.npm_package_version

詳細については、 package.json 変数を参照してください。

于 2014-03-12T00:00:12.603 に答える
60

package.json からバージョンを読み取る方法は次のとおりです。

fs = require('fs')
json = JSON.parse(fs.readFileSync('package.json', 'utf8'))
version = json.version

編集:うわー、この答えはもともと2012年のものでした!現在、いくつかのより良い答えがあります。おそらく最もクリーンなのは次のとおりです。

const { version } = require('./package.json');
于 2012-05-21T00:27:11.300 に答える
26

ファイルから特定の情報を取得する別の方法、package.jsonつまりpkginfoモジュールを使用する方法があります。

このモジュールの使い方はとても簡単です。以下を使用して、すべてのパッケージ変数を取得できます。

require('pkginfo')(module);

または特定の詳細のみ (versionこの場合)

require('pkginfo')(module, 'version');

そして、パッケージ変数が に設定されますmodule.exports(バージョン番号は からアクセスできますmodule.exports.version)。

次のコード スニペットを使用できます。

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

このモジュールには非常に優れた機能があります。プロジェクト内の任意のファイル (サブフォルダーなど) で使用でき、package.json. そのため、どこにいるか心配する必要はありませんpackage.json

それが役立つことを願っています。

于 2014-03-05T15:50:34.560 に答える
13

私のWebアプリケーションにpackage.jsonのバージョンを含めるための最良の方法を確認するためにこの質問に来たので、答えを追加するだけです。

この質問は Node.js を対象としていることは承知していますが、Webpack を使用してアプリをバンドルしている場合は、DefinePluginを使用して config でグローバル バージョンを宣言し、それを参照することをお勧めします。だからあなたはあなたのwebpack.config.json

const pkg = require('../../package.json');

...

plugins : [
    new webpack.DefinePlugin({
      AppVersion: JSON.stringify(pkg.version),
...

そしてAppVersion今、あなたが使用できるグローバルです。また.eslintrc、globals prop を介してこれを無視するようにしてください

于 2017-09-18T20:21:00.240 に答える
7

ノードコードでパッケージのバージョンを確認するには、以下を使用できます。

  1. const version = require('./package.json').version;< ES6 バージョンの場合

  2. import {version} from './package.json';ES6版の場合

  3. const version = process.env.npm_package_version; アプリケーションが を使用して開始された場合npm start、すべての npm_* 環境変数が使用可能になります。

  4. 次の npm パッケージも使用できます - root-require、pkginfo、project-version。

于 2019-04-23T12:50:31.467 に答える
5

project-versionパッケージを使用できます。

$ npm install --save project-version

それで

const version = require('project-version');

console.log(version);
//=>  '1.0.0'

何らかの理由でenv varが欠落している場合に備えて、に書かprocess.env.npm_package_versionれたバージョンにフォールバックします。package.json

于 2017-08-02T09:13:17.570 に答える
2

私は gitlab ci を使用しており、さまざまなバージョンを自動的に使用して Docker イメージにタグを付けてプッシュしたいと考えています。現在、デフォルトのdockerイメージにはノードが含まれていないため、シェルのみでこれを行う私のバージョンはこれです

スクリプト/getCurrentVersion.sh

BASEDIR=$(dirname $0)
cat $BASEDIR/../package.json | grep '"version"' | head -n 1 | awk '{print $2}' | sed 's/"//g; s/,//g'

これが何をするかは

  1. パッケージ json を印刷する
  2. 「バージョン」で行を検索します
  3. 最初の結果だけを取る
  4. " と , を置き換えます。

スクリプトは、リポジトリ内の同じ名前のサブフォルダーにあることに注意してください。したがって、 $BASEDIR/../package.json を $BASEDIR/package.json に変更しない場合

または、メジャー、マイナー、およびパッチバージョンを取得できるようにしたい場合は、これを使用します

スクリプト/getCurrentVersion.sh

VERSION_TYPE=$1
BASEDIR=$(dirname $0)
VERSION=$(cat $BASEDIR/../package.json | grep '"version"' | head -n 1 | awk '{print $2}' | sed 's/"//g; s/,//g')

if [ $VERSION_TYPE = "major" ]; then
  echo $(echo $VERSION | awk -F "." '{print $1}' )
elif [ $VERSION_TYPE = "minor" ]; then
  echo $(echo $VERSION | awk -F "." '{print $1"."$2}' )
else
  echo $VERSION
fi

バージョンが 1.2.3 の場合はこのようにします。出力は次のようになります

$ > sh ./getCurrentVersion.sh major
1

$> sh ./getCurrentVersion.sh minor
1.2

$> sh ./getCurrentVersion.sh
1.2.3

確認しなければならない唯一のことは、パッケージのバージョンがpackage.jsonで初めてキーが使用されることです。そうしないと、間違ったバージョンになってしまいます

于 2020-12-01T13:16:58.930 に答える
1

ロールアップを使用する場合、rollup-plugin-replaceプラグインを使用して、package.json をクライアントに公開せずにバージョンを追加できます。

// rollup.config.js

import pkg from './package.json';
import { terser } from "rollup-plugin-terser";
import resolve from 'rollup-plugin-node-resolve';
import commonJS from 'rollup-plugin-commonjs'
import replace from 'rollup-plugin-replace';

export default {
  plugins: [
    replace({
      exclude: 'node_modules/**',
      'MY_PACKAGE_JSON_VERSION': pkg.version, // will replace 'MY_PACKAGE_JSON_VERSION' with package.json version throughout source code
    }),
  ]
};

次に、ソース コードで、package.json バージョンが必要な場所で、文字列 'MY_PACKAGE_JSON_VERSION' を使用します。

// src/index.js
export const packageVersion = 'MY_PACKAGE_JSON_VERSION' // replaced with actual version number in rollup.config.js
于 2019-12-20T18:30:23.917 に答える