작은 프로젝트 에서 npm 패키지 버 전 을 관리 하 는 사고방식 과 방법

배경
필 자 는 최근 에 한 문제 에 부 딪 혔 다.
일부 항목 은 jenkins 와 같은 자동 배치 플랫폼 이 없습니다.전단 배 치 는 모두 로 컬 에서 npm run build 명령 을 실행 하여 압축 패 키 지 를 만 든 다음 에 서버 위 에 올 려 nginx 디 렉 터 리 에 압축 을 풀 었 습 니 다.그러나 가끔 문제 가 발생 합 니 다.예 를 들 어 프로젝트 의 한 구성원 이 다른 그룹 이 쓴 구성 요소 packageA 를 업그레이드 하 였 으 나 다른 구성원 들 은 업그레이드 되 지 않 았 을 수도 있 습 니 다.온라인 에 접속 한 후에 문제 가 생 길 수 있 습 니 다.한 가방 이 괜 찮 습 니 다.만약 에 여러 개의 가방 이 업그레이드 되 지 않 았 다 면 예상 치 못 한 문 제 를 초래 할 수 있 습 니 다.
사고의 방향
우선 이 문제 에 대해 나 는 생각 한 후에 다음 과 같은 몇 가지 문제 가 있다.
  • package.json 의 가방 이름 버 전 은 몇 가지 사용 되 는^x.x.x 의 형식 으로 판단 에 불리 합 니 다
  • 가방 의 버 전 을 어떻게 비교 합 니까?
    해결 하 다.
    질문
    첫 번 째 문제 해결 방안 은 바로 x.x.x 의 방식 으로 한 가방 의 업 데 이 트 는 반드시 한 사람 이 이 일 을 알 아야 가방 을 업데이트 할 수 있 기 때문에 가방 이름 은 어떠한 표지 도 가지 고 있 지 않 아 도 된다.
    문제
    두 번 째 문제 에 대하 여
    node_modules 의 버 전 은 낮 지만 package.json 의 버 전 은 최신 이기 때문에 우 리 는 하나의 스 크 립 트 를 정 해서 두 버 전이 일치 하 는 지 판단 할 수 있 습 니 다.
    
    const path = require('path');
    const projectRoot = process.cwd();
    const projectPack = require(path.resolve(projectRoot, 'package.json'));
    //        
    const modules = ['element-ui'];
    const allDependencies = {
      ...(projectPack.dependencies || {}),
      ...(projectPack.devDependencies || {}),
    };
    
    modules.forEach(module => {
      try {
        const packVersion = allDependencies[module];
        //              @vue/cli-service,  @vue    
        const realPath = packVersion.aplit('/');
        const pack = require(path.resolve(
          ...[projectRoot, 'node_modules', ...realPath, 'package.json'],
        ));
        const needVersions = packVersion.match(/\d+/g);
        const realVersions = pack.version.match(/\d+/g);
        for (const i in needVersions) {
          if (
            isDef(needVersions[i]) &&
            isDef(realVersions[i]) &&
            parseInt(realVersions[i]) < parseInt(needVersions[i])
          ) {
            exit(module);
          }
        }
      } catch (error) {
        exit(module);
      }
    });
    
    function exit(moduleName) {
      throw new Error(`${moduleName}     ,    npm i/npm install`);
    }
    function isDef(num) {
      return num !== null && num !== undefined;
    }
    
    
    package.json 개조 check 스 크 립 트 추가
    
     "scripts": {
        "check": "node build/checkNpmPackageVersion.js",
        "dev": "npm run check && vue-cli-service serve",
        "build": "npm run check && vue-cli-service build",
        "lint": "vue-cli-service lint"
      },
    
    모자라다
    4.567917.가방 이름 이 순수 숫자 가 아니라면 비교 에 문제 가 있 습 니 다.우리 회사 의 가방 이름 은 모두 알파,베타 등 을 가지 고 있 지 않 기 때문에 저 는 고려 하지 않 았 습 니 다4.567917.일부 원 격 창고 와 비교 할 수 있 습 니 다.예 를 들 어 npm info 패키지 이름 명령 을 바 꾸 면 결 과 를 비교 할 수 있 습 니 다총결산
    이 작은 프로젝트 에서 npm 패키지 버 전 을 관리 하 는 사고 와 방법 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 작은 프로젝트 관리 npm 패키지 버 전 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기