package.json에서 필요한 Node.js 버전을 지정하려면 어떻게 해야 합니까?
노드 버전 12 이상이 필요한 Node.js 프로젝트가 있습니다.이것을 다음에서 지정할 방법이 있습니까?packages.json
설치 관리자가 자동으로 사용자를 확인하고 업그레이드가 필요한지 알려줄 수 있습니까?
▁the를 설정할 수 .engines
의 package.json
을 설정합니다.node
또는npm
버전 또는 둘 다:
"engines" : {
"npm" : ">=8.0.0 <9.0.0",
"node" : ">=16.0.0 <17.0.0"
}
을 통해 하려면 npm을 ..npmrc
파일을에 커밋) 파(으)로 합니다.engines-strict
에 대한 선택권.true
명령어가 발생합니다. 를 들어있는 npm 시킵니다.npm install
필요한 엔진 버전이 일치하지 않을 경우 실패:
# .npmrc
engine-strict=true
파일이 , 개발자들은 해당파모개는자발든을 할입니다.npm config set engine-strict true
로컬 작업 공간에서 이 옵션을 켤 수 있습니다.
원답
코드가 더 낮은 버전에서는 절대로 작동하지 않을 것이라고 말씀하셨기 때문에 "engineStrict" 플래그도 필요할 것입니다.
{ "engineStrict" : true }
패키지에 대한 설명서입니다.json 파일은 npmjs 사이트에서 찾을 수 있습니다.
갱신하다
engineStrict
이제는 더 이상 사용되지 않으므로 경고만 표시됩니다.가 이제실사있달다습니려를 실행해야 npm config set engine-strict true
그들이 이걸 원한다면요.
업데이트 2
벤이 아래에 지적한 것처럼, 생성하는 것은.npmrc
프로젝트 루트에 있는 파일(패키지와 동일한 수준).json file) 텍스트 포함engine-strict=true
노드 버전이 호환되지 않으면 설치 중 오류가 발생합니다.
을 항음목에 합니다.package.json
:
"engines": {
"npm": ">=8.0.0 <9.0.0",
"node": ">=16.0.0 <17.0.0"
},
을 항음목에 합니다..npmrc
동일한 )package.json
):
engine-strict=true
Ibam이처럼, Ibam 말것처럼한이,▁just▁ib,engineStrict
이제 더 이상 사용되지 않습니다.하지만 저는 다음과 같은 해결책을 찾았습니다.
check-version.js:
import semver from 'semver';
import { engines } from './package';
const version = engines.node;
if (!semver.satisfies(process.version, version)) {
console.log(`Required node version ${version} not satisfied with current version ${process.version}.`);
process.exit(1);
}
꾸러미json:
{
"name": "my package",
"engines": {
"node": ">=50.9" // intentionally so big version number
},
"scripts": {
"requirements-check": "babel-node check-version.js",
"postinstall": "npm run requirements-check"
}
}
자세한 내용은 여기에서 확인하십시오. https://medium.com/ @adambisek/확인 방법 최소 필수 노드-js-version-4a78a8855a0f#.3oslqmig4
.nvmrc
그리고 한 가지 더.점 파일 '.nvmrc'는 특정 노드 버전을 요구하는 데 사용할 수 있습니다. https://github.com/creationix/nvm#nvmrc
그러나 npm 스크립트(및 yarn 스크립트)에서만 존중됩니다.
.nvmrc
이와 같이 NVM을 사용하는 경우에는 Git-tracked에서 특정 프로젝트에 필요한 nodejs 버전을 표시할 수 있습니다..nvmrc
파일 이름:
node --version > .nvmrc
또는:
echo v10.15.1 > .nvmrc
은 이설은다자적않습다니지용에 자동으로 적용되지 .cd
제정신입니다. 과 같이 .
nvm use
이제 노드의 버전이 현재 셸에 사용됩니다.
사용 중인 노드의 버전을 나열할 수 있습니다.
nvm list
.nvmrc
다음 사이트에 문서화되어 있습니다. https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
해당 노드 버전을 자동으로 선택하는 방법cd
질문 대상: 프로젝트에 따라 노드의 올바른 버전으로 자동 전환
NVM 0.33.11로 테스트됨.
.nvmrc
패키지 대비.제이손engines
다음과 같은 작업을 수행할 수:
패키지와 매우 유사합니다.json vs package-lock.json.
헤로쿠는 패키지를 존중합니다.제이손engines:
언급할 가치가 있습니다, 여기에 문서화된 것처럼, 헤로쿠는 친절하게 행동하고 복종합니다.engines:
항목(예:
"engines": {
"node": "14.17.0",
"npm": "6.14.13"
},
따라서 항상, 항상 로컬에서 사용 중인 항목으로 설정해야 합니다.
이전에 이 스레드에 대한 자동 삭제 응답에 대해 언급했습니다.
이를 위한 또 다른 간단한 방법이 있습니다.
npm install Node@8
(노드 8을 package.json의 종속성으로 저장)- 당신의 앱은 누구에게나 - 심지어 얀 사용자에게도 노드 8을 사용하여 실행될 것입니다!
이는 다음과 같은 이유로 작동합니다.node
노드를 패키지 바이너리로 제공하는 패키지일 뿐입니다.node_module/.bin으로 포함되므로 노드를 패키지 스크립트에서만 사용할 수 있습니다.메인 셸이 아닙니다.
여기에서 Twitter에 대한 토론을 참조하십시오. https://twitter.com/housecor/status/962347301456015360
여기 아담의 대답을 바탕으로 한 바로 사용할 수 있는 완벽한 대본이 있습니다.
check-version.js
:
/* eslint-disable no-console */
const fs = require('fs');
const semver = require('semver');
const childProcess = require('child_process');
// checks that current node and npm versions satisfies requirements in package.json
// to run manually: node check-version.js [verbose]
const VERBOSE_FORCED = false;
const args = process.argv.slice(2);
const VERBOSE = VERBOSE_FORCED || (args.length > 0 && args[0] === 'verbose');
const printErrAndExit = (x) => {
console.error(x);
console.error('Aborting');
process.exit(1);
};
const checkNpmVersion = (npmVersionRequired) => {
if (!npmVersionRequired) {
console.log('No required npm version specified');
return;
}
const npmVersion = `${childProcess.execSync('npm -v')}`.trim();
if (VERBOSE) console.log(`npm required: '${npmVersionRequired}' - current: '${npmVersion}'`);
if (!semver.satisfies(npmVersion, npmVersionRequired)) {
printErrAndExit(`Required npm version '${npmVersionRequired}' not satisfied. Current: '${npmVersion}'.`);
}
};
const checkNodeVersion = (nodeVersionRequired) => {
if (!nodeVersionRequired) {
console.log('No required node version specified');
return;
}
const nodeVersion = process.version;
if (VERBOSE) console.log(`node required: '${nodeVersionRequired}' - current: '${nodeVersion}'`);
if (!semver.satisfies(nodeVersion, nodeVersionRequired)) {
printErrAndExit(`Required node version '${nodeVersionRequired}' not satisfied. Current: '${nodeVersion}'.`);
}
};
const json = JSON.parse(fs.readFileSync('./package.json'));
if (!json.engines) printErrAndExit('no engines entry in package json?');
checkNodeVersion(json.engines.node);
checkNpmVersion(json.engines.npm);
루트 프로젝트 디렉터리에 배치해야 합니다.
에서 지정한 대로 노드 및/또는 npm 버전을 확인합니다.package.json
(engines
입력), 예
"engines": {
"node": ">=16.0.0 <17.0.0",
"npm": ">=8.0.0 <9.0.0"
},
다음과 같이 수동으로 호출할 수 있습니다.
node check-version.js [verbose]
또는 스크립트로 포함합니다.package json
독립 실행형 스크립트로 사용하거나 다른 스크립트의 사전 요구 사항으로 사용할 수 있습니다(예:
"scripts" : {
"start": "node check-version.js && vite",
"build": "node check-version.js && vite build",
"lint": "node check-version.js && eslint .",
"check-version": "node check-version.js verbose"
},
Mocha 테스트 사례:
describe('Check version of node', function () {
it('Should test version assert', async function () {
var version = process.version;
var check = parseFloat(version.substr(1,version.length)) > 12.0;
console.log("version: "+version);
console.log("check: " +check);
assert.equal(check, true);
});});
언급URL : https://stackoverflow.com/questions/29349684/how-can-i-specify-the-required-node-js-version-in-package-json
'programing' 카테고리의 다른 글
Eclipse - "작업영역이 사용 중이거나 작성할 수 없습니다. 다른 작업영역을 선택하십시오." (0) | 2023.05.20 |
---|---|
NodeJs: /usr/bin/env: 노드를 설치할 수 없습니다.해당 파일 또는 디렉터리가 없습니다. (0) | 2023.05.20 |
C#에서 다중 문자 구분 기호로 문자열을 분할하려면 어떻게 해야 합니까? (0) | 2023.05.20 |
지정된 날짜의 올바른 주 번호 가져오기 (0) | 2023.05.20 |
닙이 로드되었지만 '보기' 출구가 설정되지 않았습니다. (0) | 2023.05.20 |