package.json
nodejsアプリでバージョンセットを取得する方法はありますか? 私はこのようなものが欲しいだろう
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
package.json
nodejsアプリでバージョンセットを取得する方法はありますか? 私はこのようなものが欲しいだろう
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
次のコード フラグメントが最適であることがわかりました。require
をロードするために使用するためpackage.json
、現在の作業ディレクトリに関係なく機能します。
var pjson = require('./package.json');
console.log(pjson.version);
@Pathogenの厚意による警告:
これを Browserify で行うと、セキュリティに影響があります。
をクライアントに公開しないように注意してください。package.json
これは、すべての依存関係のバージョン番号、ビルドおよびテスト コマンドなどがクライアントに送信されることを意味するためです。
サーバーとクライアントを同じプロジェクトで構築している場合は、サーバー側のバージョン番号も公開します。このような特定のデータは、攻撃者がサーバーへの攻撃により適したものにするために使用できます。
アプリケーションが で起動された場合はnpm start
、次を使用できます。
process.env.npm_package_version
詳細については、 package.json 変数を参照してください。
package.json からバージョンを読み取る方法は次のとおりです。
fs = require('fs')
json = JSON.parse(fs.readFileSync('package.json', 'utf8'))
version = json.version
編集:うわー、この答えはもともと2012年のものでした!現在、いくつかのより良い答えがあります。おそらく最もクリーンなのは次のとおりです。
const { version } = require('./package.json');
ファイルから特定の情報を取得する別の方法、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
。
それが役立つことを願っています。
私の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 を介してこれを無視するようにしてください
ノードコードでパッケージのバージョンを確認するには、以下を使用できます。
const version = require('./package.json').version;
< ES6 バージョンの場合
import {version} from './package.json';
ES6版の場合
const version = process.env.npm_package_version;
アプリケーションが を使用して開始された場合npm start
、すべての npm_* 環境変数が使用可能になります。
次の npm パッケージも使用できます - root-require、pkginfo、project-version。
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
私は 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'
これが何をするかは
スクリプトは、リポジトリ内の同じ名前のサブフォルダーにあることに注意してください。したがって、 $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で初めてキーが使用されることです。そうしないと、間違ったバージョンになってしまいます
ロールアップを使用する場合、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