Node 버전 12 이상이 필요한 Node.js 프로젝트가 있습니다. packages.json 파일에서이를 지정하여 설치 프로그램이 사용자에게 업그레이드해야하는지 자동으로 확인하고 알리도록하는 방법이 있습니까?
Node 버전 12 이상이 필요한 Node.js 프로젝트가 있습니다. packages.json 파일에서이를 지정하여 설치 프로그램이 사용자에게 업그레이드해야하는지 자동으로 확인하고 알리도록하는 방법이 있습니까?
답변:
"엔진"필드를 사용할 수 있다고 생각합니다.
{ "engines" : { "node" : ">=0.12" } }
코드가 하위 버전에서 작동하지 않는다고 말하면 "engineStrict"플래그도 원할 것입니다.
{ "engineStrict" : true }
package.json 파일에 대한 설명서 는 npmjs 사이트 에서 찾을 수 있습니다.
최신 정보
engineStrict
더 이상 사용되지 않으므로 경고 만 표시됩니다. npm config set engine-strict true
원하는 경우 사용자가 실행 해야합니다.
업데이트 2
아래에서 지적한 바와 같이, .npmrc
프로젝트의 루트 (package.json 파일과 동일한 레벨)에 파일을 텍스트로 작성 engine-strict=true
하면 노드 버전이 호환되지 않는 경우 설치 중에 오류가 발생합니다.
engineStrict
은 몇 개월 동안 사용되지 않아 사용할 때 경고가 발생합니다. npm @ 3부터는 필드는 무시되고, 엔진 위반은 경고를 생성합니다 당신은, 사용자로, 원하는 경우 엄격한 엔진 필드 집행, 바로 실행 NPM의 설정 세트 엔진 엄격한 사실. "
cd .. && npm i <folder-name>
프로젝트 자체를 확인하기 위해 기억하십시오 . 그러나 이것은 자체적으로 전체 빌드를 트리거합니다.
engine-strict=true
.npmrc에 추가 해도 이제 같은 효과가 있습니다
더하다
에 package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
파일에 .npmrc
( package.json
같은 디렉토리에 가까운 )
engine-strict=true
npm install
. 작동 yarn
뿐만 아니라
package.json
위의 유사한 "엔진"과 (와 11.13.0
와 6.7.0
), 그리고 .npmrc
아무것도하지만, 내용은 위에서 지정한. nvm에서 나를 이전 노드 버전으로 전환 한 다음 실행 npm install
했지만 종속성을 설치하고 엔진 버전 불일치조차 언급하지 않았습니다.
Ibam 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);
}
package.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/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4 에서 확인하십시오.
.nvmrc
그리고 하나 더. 특정 노드 버전이 필요한 경우 '.nvmrc'도트 파일을 사용할 수 있습니다. https://github.com/creationix/nvm#nvmrc
그러나 npm 스크립트 (및 원사 스크립트)만이 존중됩니다.
.nvmrc
이처럼 NVM 을 사용하고 있다면 주어진 프로젝트에 필요한 nodejs 버전을 git-tracked .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로 테스트되었습니다.
이 작업을 수행하는 또 다른 간단한 방법이 있습니다.
npm install Node@8
(노드 8을 package.json의 종속성으로 저장)이것은 node
노드를 패키지 바이너리로 제공하는 패키지 일뿐 이므로 작동합니다 . node_module / .bin 만 포함하면 스크립트를 패키징 할 수있는 노드 만 만들 수 있습니다. 메인 쉘이 아닙니다.
https://twitter.com/housecor/status/962347301456015360 에서 트위터에 대한 토론을 참조하십시오.
./node node-sass
아니라 .bin에서 실행해야합니다 node-sass
. 모든 .bin 파일에 대해 동일한 지 확실하지 않습니다.
모카 테스트 사례 예 :
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);
});});