웹 앱에서 노드 버전을 수정하는 방법

개발자, CI/CD, 프로덕션, 모두가 동일한 노드 버전을 사용하도록 버전이 아닌 것을 수정하는 방법은 무엇입니까?

1단계 - package.json에 nodeVersionLock 추가



사전 설치 및 사전 시작 스크립트도 추가해야 합니다.
package.json은 다음과 같이 보일 것입니다.

{
  "name": "metaindex-frontend",
  "nodeVersionLock": "14.13.0",
  "scripts": {
    "preinstall": "node ./system/npm/preinstall.js",
    "prestart": "node ./system/npm/preinstall.js",
    "start": "run-p build:tailwindcss start:watchtailwindcss start:cra",
    "start:cra": "react-scripts start",
   }
}

2단계 - 원하지 않는 노드 버전이 발견되면 오류를 던집니다.



내용./system/npm/preinstall.js
const pkgJson = require('../../package.json');

const nodeVersion = process.versions.node;
let err = false;

if (pkgJson.nodeVersionLock !== nodeVersion) {
  console.error(`Please use node ${pkgJson.nodeVersionLock}. Try
    nvm install v${pkgJson.nodeVersionLock}
    nvm reinstall-packages v${nodeVersion}
    nvm uninstall v${nodeVersion}
  `);
  err = true;
} else {
  console.error(`Thanks for using Latest Node version ${pkgJson.nodeVersionLock}.\n`);
}

if (err) {
  console.error('');
  process.exit(1);
}

3단계 - Dockerfile 및 GitbHub YML 자동 업데이트



이 단계는 선택 사항이며 사용자 지정입니다. 설정에 따라 다릅니다.

내용./system/npm/fix-node-versions.js
const fs = require('fs');
const YAML = require('yamljs');
const replaceFirstLineOfFile = require('file-firstline-replace');
const pkgJson = require('../../package.json');

var filename = 'Dockerfile';
var newHeader = `FROM node:${pkgJson.nodeVersionLock} as builder\n`;
replaceFirstLineOfFile(filename, newHeader, function (error) {
  if (error) {
    throw error;
  }
  console.warn('Dockerfile updated');
});

// Replace in gitlab ci file.

var gitlabCiYml = fs.readFileSync('.github/workflows/node.js.yml', 'utf8');

// parse YAML string
var gitlabCiJSON = YAML.parse(gitlabCiYml);
gitlabCiJSON.jobs.build.strategy.matrix['node-version'][0] = pkgJson.nodeVersionLock;
var spaces = 4;
var gitlabCiYmlUpdated = YAML.stringify(gitlabCiJSON, spaces);

fs.writeFileSync('.github/workflows/node.js.yml', gitlabCiYmlUpdated, 'utf8');
console.warn('github CI file updated');

좋은 웹페이지 즐겨찾기