programing

package.json에서 필요한 Node.js 버전을 지정하려면 어떻게 해야 합니까?

showcode 2023. 5. 20. 11:02
반응형

package.json에서 필요한 Node.js 버전을 지정하려면 어떻게 해야 합니까?

노드 버전 12 이상이 필요한 Node.js 프로젝트가 있습니다.이것을 다음에서 지정할 방법이 있습니까?packages.json설치 관리자가 자동으로 사용자를 확인하고 업그레이드가 필요한지 알려줄 수 있습니까?

▁the를 설정할 수 .enginespackage.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에서 "알 수 있는 비호환성 범위 없음"을 지정합니다.
  • 을 보다.nvmrc"과의 약속"을 정하다

패키지와 매우 유사합니다.json vs package-lock.json.

헤로쿠는 패키지를 존중합니다.제이손engines:

언급할 가치가 있습니다, 여기에 문서화된 것처럼, 헤로쿠는 친절하게 행동하고 복종합니다.engines:항목(예:

  "engines": {
    "node": "14.17.0",
    "npm": "6.14.13"
  },

따라서 항상, 항상 로컬에서 사용 중인 항목으로 설정해야 합니다.

이전에 이 스레드에 대한 자동 삭제 응답에 대해 언급했습니다.

이를 위한 또 다른 간단한 방법이 있습니다.

  1. npm install Node@8(노드 8을 package.json의 종속성으로 저장)
  2. 당신의 앱은 누구에게나 - 심지어 얀 사용자에게도 노드 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

반응형