web-dev-qa-db-ja.com

Nodejsコードでpackage.jsonからバージョンを取得する方法はありますか?

Nodejsアプリケーションのpackage.jsonに設定されているバージョンを取得する方法はありますか?私はこのようなものが欲しいです

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
472

私は、次のコードが最も効果的であることがわかりました。 package.jsonをロードするのに 'require'を使用しているので、現在の作業ディレクトリに関係なく動作します。

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

警告、@ Pathogenのご好意による。

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

831
Mark Wallace

あなたのアプリケーションが 'npm start'で起動された場合、あなたは単に使うことができます:

process.env.npm_package_version

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

256
Julien Christin

ES6モジュールを使用すると、次のことができます。

import {version} from './package.json';
111

あるいは普通のシェルでは:

node -e "console.log(require('./package.json').version);"

これを短縮することができます

node -p "require('./package.json').version"

これは必ずしも質問の対象ではありませんが、script内のバージョン管理されたファイルにログを記録するためなど、package.json内のバージョンを使用する場合に役立ちます。

{
  "name": "myapp",
  "version": "0.1.2",
  "scripts": {
    "run": "node index.js 2>&1 | tee -a myapp_v$(node -p \"require('./package.json').version\").log",
  ...
}
65
abernier

正しい答えは例にここにあります:

  1. 答え(このコードにはpackage.jsonファイルが含まれており、バージョンを取得します)

    const { version } = require('./package.json');


  1. 回答

    const version = process.env.npm_package_version


JSON.parsefs.readFilefs.readFileSyncを使用しないでください。また別のnpm modulesを使用しないでください。この質問には必要ありません。

37
аlex dykyі

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

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

package.jsonファイルから特定の情報を取得する別の方法、すなわち pkginfo moduleを使う方法があります。

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

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がどこにあるのか心配する必要はありません。

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

21
Tom

サーバサイドでも動作する安全な クライアントサイド ソリューションを探している人のために、 genversion があります。これは、最も近いpackage.jsonからバージョンを読み取り、そのバージョンをエクスポートするインポート可能なCommonJSモジュールファイルを生成するコマンドラインツールです。免責事項:私はメンテナです。

$ genversion lib/version.js

クライアントサイドの安全性はOPの主な意図ではないと認めますが、 Mark Wallace および aug の回答で説明したように、これは非常に関連性があり、またこのQ&Aを見つけた理由です。

13
Akseli Palén

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

ただし、Webpackを使用してアプリをバンドルする場合は、 DefinePlugin を使用してグローバルバージョンを設定し、それを参照することをお勧めします。 webpack.config.jsonでできること

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

...

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

そしてAppVersionは今やあなたが使うことのできるグローバルなものです。また、あなたの .eslintrcの中で、あなたがグローバルプロップでこれを無視することを確認してください

7
aug

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

$ npm install --save project-version

それから

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

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

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

3
simonepri

ES6を使用してpackage.jsonをインポートし、バージョン番号を取得してそのバージョンをコンソールに出力することができます。

import {name as app_name, version as app_version}  from './path/to/package.json';

console.log(`App ---- ${app_name}\nVersion ---- ${app_version}`);
2
ÁngelBlanco

これはOPの意図ではないことを私は知っていますが、私はこれをしなければならなかったので、それが次の人に役立つことを願っています。

CI/CDプロセスにdocker-composeを使用している場合は、この方法で入手できます。

version:
  image: node:7-Alpine
  volumes:
    - .:/usr/src/service/
  working_dir: /usr/src/service/
  command: ash -c "node -p \"require('./package.json').version.replace('\n', '')\""

画像には、任意のノード画像を使用できます。それが一番小さいので、私はアルパインを使います。

1

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

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

  2. ES6バージョンのimport {version} from './package.json';

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

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

1
Rohit

findup-sync でこれを行います。

var findup = require('findup-sync');
var packagejson = require(findup('package.json'));
console.log(packagejson.version); // => '0.0.1' 
1
Luca Bonavita

package.jsonファイルをserver.jsまたはapp.jsにインポートしてから、package.jsonプロパティにアクセスしてサーバーファイルに入れます。

var package = require('./package.json');

package変数には、package.json内のすべてのデータが含まれています。

0
Patharraj

Require resolveを使用しない理由...

const packageJson = path.dirname(require.resolve('package-name')) + '/package.json';
const { version } = require(packageJson);
console.log('version', version)

このアプローチでは、すべてのサブパスで機能します:)

0
Gianluca Cirone

親モジュールのpackage.jsonを取得するのに便利なコードを作りました

function loadParentPackageJson() {
    if (!module.parent || !module.parent.filename) return null
    let dir = path.dirname(module.parent.filename)
    let maxDepth = 5
    let packageJson = null
    while (maxDepth > 0) {
        const packageJsonPath = `${dir}/package.json`
        const exists = existsSync(packageJsonPath)
        if (exists) {
            packageJson = require(packageJsonPath)
            break
        }
        dir = path.resolve(dir, '../')
        maxDepth--
    }
    return packageJson
}
0
g00dnatur3