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
.
동일한 프로젝트에서 서버와 클라이언트를 빌드하는 경우 서버 측 버전 번호도 노출됩니다. 이러한 특정 데이터는 서버의 공격에 더 잘 맞도록 공격자가 사용할 수 있습니다.
require('root-require')('package.json').version
Error: Cannot find module 'package.json'
.
'npm start'로 응용 프로그램을 시작한 경우 다음을 사용하면됩니다.
process.env.npm_package_version
자세한 내용은 package.json vars 를 참조하십시오.
npm run …
)는 버전이 환경 변수에 $npm_package_version
있습니다.
ES6 모듈을 사용하면 다음을 수행 할 수 있습니다.
import {version} from './package.json';
또는 평범한 오래된 껍질에서 :
node -e "console.log(require('./package.json').version);"
이것은 단축 될 수 있습니다
node -p "require('./package.json').version"
이것이 정확히 질문 한 내용은 아니지만, package.json
자체 버전을 사용하려는 경우에 유용합니다 ( 예 script
: :
{
"name": "myapp",
"version": "0.1.2",
"scripts": {
"run": "node index.js 2>&1 | tee -a myapp_v$(node -p \"require('./package.json').version\").log",
...
}
버전을 검색하는 방법에는 두 가지가 있습니다.
package.json
버전 요구 및 얻기 :const { version } = require('./package.json');
const version = process.env.npm_package_version;
사용하지 마십시오 JSON.parse
, fs.readFile
, fs.readFileSync
다른 사용하지 않는 npm modules
이 질문 것이 필요는 없습니다합니다.
npm_*
환경 값은 스크립트가 NPM에 의해 시작된 경우에만 사용할 수 있습니다 (예 :) npm start
. 당신이 node app.js
하거나 비슷한 경우, 그들은 존재하지 않습니다.
package.json
.
package.json에서 버전을 읽는 방법은 다음과 같습니다.
fs = require('fs')
json = JSON.parse(fs.readFileSync('package.json', 'utf8'))
version = json.version
require() introduces? (for instance, does
utf8 읽기를 지원하지 않는 요구 사항을 알고 있습니까? 발췌 문장에서 제안한대로)
require()
파일을 캐시하므로이 경우 차이가 없습니다.
JSON.parse(fs.readFileSync('package.json', 'utf8'))
대신 일반적으로하는 이유가 delete require.cache[require.resolve('package.json')]; require('package.json')
있습니까?
pkginfo 모듈을 package.json
사용 하여 파일 에서 특정 정보를 가져 오는 다른 방법이 있습니다 .
이 모듈의 사용법은 매우 간단합니다. 다음을 사용하여 모든 패키지 변수를 얻을 수 있습니다.
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
.
도움이 되길 바랍니다.
module
여기?
서버 측에서도 작동 하는 안전한 클라이언트 측 솔루션 을 찾는 사람들에게는 genversion이 있습니다. 가장 가까운 package.json에서 버전을 읽고 버전을 내보내는 가져 오기 가능한 CommonJS 모듈 파일을 생성하는 명령 행 도구입니다. 면책 조항 : 저는 관리자입니다.
$ genversion lib/version.js
고객 측 안전은 OP의 주요 의도가 아니라는 점을 인정하지만 Mark Wallace 와 aug의 답변에서 논의 된 바와 같이 , 이는 관련성이 높으며이 Q & A를 찾은 이유이기도합니다.
내 웹 응용 프로그램에 package.json의 버전을 포함시키는 가장 좋은 방법을 보려면이 질문에 왔기 때문에 대답을 추가하십시오.
나는이 질문이 Node.js를 대상으로한다는 것을 알고 있지만 Webpack을 사용하여 응용 프로그램을 번들로 제공하는 경우 권장되는 방법은 DefinePlugin 을 사용 하여 구성에서 전역 버전을 선언하고 참조하는 것입니다. 그래서 당신은 할 수 있습니다webpack.config.json
const pkg = require('../../package.json');
...
plugins : [
new webpack.DefinePlugin({
AppVersion: JSON.stringify(pkg.version),
...
그리고 AppVersion
이제 사용할 수있는 전역이되었습니다. 또한 .eslintrc
글로벌 소품을 통해 이것을 무시하십시오.
옵션 1
모범 사례는 npm 환경 변수를 사용하여 package.json의 버전입니다.
process.env.npm_package_version
https://docs.npmjs.com/using-npm/config.html 에 대한 자세한 정보
이것은 NPM 명령을 사용하여 서비스를 시작할 때만 작동합니다.
빠른 정보 : process.env.npm_package_ [keyname]을 사용하여 pacakge.json의 모든 값을 읽을 수 있습니다
옵션 2
https://www.npmjs.com/package/dotenv 를 .env
파일 로 사용하여 환경 변수의 버전 설정process.env.version
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}`);
노드 코드에서 패키지 버전을 확인하려면 다음을 사용할 수 있습니다.
const version = require('./package.json').version;
<ES6 버전의 경우
import {version} from './package.json';
ES6 버전
const version = process.env.npm_package_version;
를 사용하여 응용 프로그램을 시작한 경우 npm start
모든 npm_ * 환경 변수를 사용할 수 있습니다.
root-require, pkginfo, project-version과 같은 npm 패키지도 사용할 수 있습니다.
프로젝트 버전 패키지를 사용할 수 있습니다 .
$ 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
.
나는 이것을 다음과 findup-sync
같이한다 :
var findup = require('findup-sync');
var packagejson = require(findup('package.json'));
console.log(packagejson.version); // => '0.0.1'
package.json
것과 비슷한 최상위 수준을 얻습니다 process.env.npm_package_version
. 따라서 라이브러리 버전을 얻으려고하면 실제로 발신자의 버전을 얻습니다. 간단한 require ( './ package.json')은 이것을 피할 것입니다.
나는 이것이 OP의 의도가 아니라는 것을 알고 있지만 단지 그렇게해야했기 때문에 다음 사람에게 도움이되기를 바랍니다.
CI / CD 프로세스에 도커 작성을 사용하는 경우이 방법으로 얻을 수 있습니다!
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', '')\""
이미지의 경우 모든 노드 이미지를 사용할 수 있습니다. 나는 그것이 가장 작기 때문에 알파인을 사용합니다.
부모 모듈의 패키지를 얻는 데 유용한 코드를 만들었습니다.
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
}
롤업을 사용하는 경우, 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
console.log(process.version)