- 키워드: package.json, yarn version, $npm_package_version, .env(dotenv), bitbucket pipeline, grep/awk/sed/tr
- 상황
- 웹페이지에 현재 package.json의 version field 값을 string으로 표시하고자 한다. (ex> 'v2.4.2')
- npm scripts의 package.json vars를 사용하면 $npm_package_version이라는 값으로 쉽게 version을 가져올 수 있다.
https://www.npmjs.cn/misc/scripts/#packagejson-vars - 또는 'yarn version' command를 사용하여 현재 package.json의 version을 확인할 수 있다.
https://classic.yarnpkg.com/en/docs/cli/version - .env에
을 추가하고, 개발환경에서 version이 올바르게 불러와지는 것을 확인했다.('v2.4.2')REACT_APP_VERSION=$npm_package_version
- 이후 같은 방식으로 bitbucket deployments의 환경 변수(github secrets와 유사함)에 $npm_package_version을 추가했지만, 파이프라인에서는 이를 문자열 그대로 인식하여 'v$npm_package_version'으로 나타나는 버그가 발생했다.
- 해결 과정
- 먼저 bitbucket deployments 환경 변수는 문자열을 그대로 인식한다는 점을 파악했으니, pipeline 스크립트 파일 내에서 스크립트를 통해 해결하고자 했다.
- pipeline에서 build하기 직전, .env 파일에 echo를 이용하여 환경변수를 추가하면 가능한지 시험해보았다.
// bitbucket-pipelines.yml image: node:14.17.0 ... 생략 ... - echo REACT_APP_VERSION=$npm_package_version >> .env - yarn build
- 하지만 pipeline이 실행되는 환경은 pakcage.json과 관련없는 일반적인 node 환경이었기 때문에 $npm_package_version의 값은 빈 문자열이 되었다. ('v ')
- 상황 2의 방법을 사용할 수 없으니 상황 3의 방법으로 해결하고자 했다. terminal에 'yarn node'를 실행하면
와 같은 결과가 출력된다. 여기서 '2.4.2'라는 문자열을 파싱하면 문제를 해결할 수 있다.yarn version v1.22.4 info Current version: 2.4.2
- 먼저 pipeline에서 yarn version을 실행해본 결과, 'vyarn version v1.22.4...생략...: 2.4.2'라는 값이 배포되는 것을 확인했다.
그렇다면 이제 yarn version의 결과물을 적절히 parsing하면 된다.// bitbucket-pipelines.yml - echo REACT_APP_VERSION=$(yarn version) >> .env - yarn build
위의 명령어를 통해 '2.4.2'라는 version만 추출할 수 있다.yarn version | grep version | awk -F: '{ print $2 }' | sed '/^$/d' | tr -d ' '
- 이제 .env나 bitbucket 환경 변수를 따로 추가하지 않고 pipeline을 통해 자동 배포해도 version이 업데이트 된다!
- echo REACT_APP_VERSION=$(yarn version | grep version | awk -F":" '{ print $2 }' | sed '/^$/d' | tr -d ' ') >> .env - yarn build
'프론트엔드' 카테고리의 다른 글
웹접근성(web accessibility), SEO 개선하기 (0) | 2022.02.11 |
---|---|
js try/catch문으로 함수 리팩토링하기 (0) | 2022.01.16 |
리액트에서 무한 영역 UI 만들기(feat. requestAnimationFrame, useRef) (0) | 2021.12.30 |
Vercel log를 통해 Next.js 500 error 원인 분석하기 (0) | 2021.12.29 |
Button에 pointer-events, -webkit-tap-highlight-color 설정하기 (0) | 2021.12.15 |