Vue에서 이건 꼭 설정하고 프로젝트 시작하자

Table of Content

설명

> 현재 배포된 어플리케이션의 버전을 확인하기가 곤란할때가 많습니다. 버전을 꼼꼼하게 기록한다면 상관없지만, vue.config.js 파일을 수정하여 현재 배포된 git commit hash값을 자동으로 주입하여 어플리케이션의 버전을 확인해봅시다.

들어가며

뷰 프로젝트(vue project)를 보일러 플레이트 하면 npm run serve로 빨리 코드부터 나가고 싶을 것이다. 조금만 침착하고 versiongit hash 정보를 애플리케이션에 심도록 하자.

그럼 아래와 같이 애플리케이션에서도 git hash와 package.json의 version 정보를 확인할 수 있을 것이다.

vue

어떻게 구현하는가?

package.json version

  1. 먼저 vue.config.js가 없다면 만들어준다. 프로젝트 루트에 만들면 된다.(package.json과 같은 레벨)
  2. 그리고 vue.config.js에 아래와 같이 선언한다.
process.env.VUE_APP_VERSION = require("./package.json").version;

GIT HASH

  1. 마찬가지로 vue.config.js가 없다면 만들어준다. 프로젝트 루트에 만들면 된다.(package.json과 같은 레벨)
  2. git hash가 길기 때문에 식별자로 쓰기 위해 끝자리 8자리만 짤라오는 함수를 만든다.(당연히 로컬 경로에 git이 깔려 있어야 한다.)

    function getCurrentHash(lastNumber = 8) {
      try {
        const buffer = execSync("git rev-parse HEAD"); // ! initial commit이 없으면 HEAD 에러
        const input = Buffer.from(buffer).toString();
    
        // last characters
        const start = input.length - lastNumber - 1;
        const end = input.length - 1;
        return input.slice(start, end);
      } catch (error) {
        console.error(error);
      }
    }
    
  3. vue.config.js에 아래와 같이 선언한다.

    process.env.VUE_APP_HASH = getCurrentHash(8);
    
    module.exports = {};
    

완성된 vue.config.js의 모습

const { execSync } = require("child_process");
const { Buffer } = require("buffer");

process.env.VUE_APP_HASH = getCurrentHash(8);
process.env.VUE_APP_VERSION = require("./package.json").version;

module.exports = {
  // config
};

function getCurrentHash(lastNumber = 8) {
  try {
    const buffer = execSync("git rev-parse HEAD"); // ! initial commit이 없으면 HEAD 에러
    const input = Buffer.from(buffer).toString();

    // last characters
    const start = input.length - lastNumber - 1;
    const end = input.length - 1;
    return input.slice(start, end);
  } catch (error) {
    console.error(error);
  }
}

어떻게 작동하는가?

친절하게도 Vue CLI에서 vue.config.js를 통해 VUE_APP_으로 시작하는 환경 변수들은 같이 번들링 되도록 설정해 놓았다. (https://cli.vuejs.org/guide/mode-and-env.html#environment-variables)

따라서 다른 환경변수들을 쓰려면 webpack.DefinePlugin을 따로 설정해줘야 하는데 어렵지는 않지만 꼭 환경변수를 분리해서 생각하는게 아니라면 초기에는 간단하게 구성하도록 하자.

왜 해야하는가?

그 외 TIP