표준 버전으로 Expo 릴리스 간소화

앱을 출시하는 것은 반복적이고 때로는 성가신 작업일 수 있습니다. 스토어용 앱을 준비하고 빌드했지만 버전 코드를 입력하는 것을 잊었다는 사실을 알게 되었습니다. 이 작업이 마음에 들지 않는다면 Conventional Changelog의 훌륭한 사람들이 당신을 위한 것을 준비했습니다!

표준 버전은 단일 명령yarn standard-version으로 릴리스 프로세스를 단순화하는 도구입니다. 사용자 정의가 가능하며 conventional commits에서 생성된 변경 로그와 같이 필요한 모든 것이 있어야 합니다. 아직 도구를 모르신다면 check out the documentation first .

이 가이드에서는 Standard version for Expo을 구성하는 방법을 보여드리겠습니다. 예제 프로젝트를 설정하고 자동화된 expo.version , expo.android.versionCodeexpo.ios.buildNumber 에 대해 구성합니다.

🚀가자



먼저 빈 템플릿을 사용하여 빈 Expo 프로젝트를 만듭니다.

$ expo init --template blank

다음으로 프로젝트의 시작 버전을 정의해야 합니다. 표준 버전은 package.json 's version 속성을 사용하여 현재 버전을 결정합니다. 이 값은 다음 릴리스를 계산하는 데 사용됩니다. 이 속성을 0.0.0 로 설정해 보겠습니다.

{
  "version": "0.0.0",
  "main": "node_modules/expo/AppEntry.js",
  ...
}

이제 Expo 확장이 있는 표준 버전을 개발 종속성에 추가합니다.

$ yarn add --dev standard-version@next standard-version-expo

Currently, [email protected] is the only version that supports updaters from packages. That's why we need @next here.



시험 실행 모드에서 표준 버전을 실행하여 프로젝트를 테스트할 수 있습니다. 이 모드는 아무것도 하지 않고 수행할 작업만 알려줍니다.

$ yarn standard-version --dry-run

If you get the Invalid Version: undefined error, it means the package.json doesn't have a starting version.



⚙️ 표준 버전 구성



이제 기본 사항을 설정했으므로 Expo용 Standard 버전을 구성해야 합니다. 다음을 사용하여 .versionrc.js라는 파일을 만듭니다.

module.exports = {
  bumpFiles: [
    {
      filename: 'package.json',
    },
    {
      filename: 'app.json',
      updater: require.resolve('standard-version-expo'),
    },
  ],
};

This tells Standard version that we want to update app.json, using the default updater from the Expo extension. The updater bumps expo.version with the new version, so you don't have to! 😬

Note: We also want to update our package.json, with the default updater, to keep a single source of truth for our versions. (See PR #3 for more details)


--dry-run를 사용하여 구성을 다시 테스트하십시오. 다음 출력이 표시되면 훌륭하게 작업한 것입니다. 🦄

$ yarn standard-version --dry-run

✔ bumping version in app.json from 1.0.0 to 0.0.1
✔ created CHANGELOG.md
✔ outputting changes to CHANGELOG.md
...
✔ committing app.json and CHANGELOG.md
✔ tagging release v0.0.1

이제 이러한 변경 사항을 커밋하고 새 마이너 버전을 만듭니다.

$ git add .
$ git commit -m 'feat: add standard version for releases'
$ yarn standard-version --release-as minor

도구를 실행한 후 새 파일CHANGELOG.md과 업데이트된 파일app.json이 있어야 합니다! 여전히 로컬 변경 사항을 원격으로 푸시해야 하지만 문제가 발생한 경우 변경 사항을 되돌릴 수 있는 옵션도 제공됩니다. 🧑‍🔧

📱 빌드 버전 구성



앱을 스토어에 출시할 계획이라면 Standard 버전을 조금 더 구성해야 합니다. 또한 Android version codesiOS build numbers 을 업데이트해야 합니다. iOS 및 Android 구성으로 매니페스트를 업데이트하는 것으로 시작하겠습니다.

{
  "expo": {
    ...
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "com.bycedric.awesomeapp",
      "buildNumber": "0.0.0"
    },
    "android": {
      "package": "com.bycedric.awesomeapp",
      "versionCode": 0
    }
  }
}


좋습니다. 이제 이러한 새 속성에 대해 표준 버전에 알려야 합니다. expo.version 와 마찬가지로 모든 릴리스에서 값이 변경되어야 합니다. 이렇게 하려면 .versionrc.js를 열고 새 버전 범퍼를 추가합니다.

module.exports = {
  bumpFiles: [
    {
      filename: 'package.json',
    },
    {
      filename: 'app.json',
      updater: require.resolve('standard-version-expo'),
    },
    {
      filename: 'app.json',
      updater: require.resolve('standard-version-expo/android'),
    },
    {
      filename: 'app.json',
      updater: require.resolve('standard-version-expo/ios'),
    },
  ],
};


There are multiple types of version updaters, each with their own "tactic". You can find them all here. For simplicity, let's stick to the recommended bumpers for now.



그게 다야! 이러한 변경 사항을 커밋하고 표준 버전을 실행하면 빌드 버전 번호도 업데이트됩니다. 🌈

$ git add .
$ git commit -m 'feat: add standard version for releases'
$ yarn standard-version --release-as patch

🤝 읽어주셔서 감사합니다!



이것이 누구에게나 유용할 수 있기를 바랍니다. 이 라이브러리를 사용하는 경우 언제든지 문의하십시오. 도구 사용 경험에 대해 듣고 싶습니다. 또한 개선할 수 있는 좋은 아이디어가 있거나 문제가 있는 경우 언제든지 문의해 주세요. 🙆‍♂️

📚 추가 굿즈


  • 엑스포 관련 자료는 Expo Developers slack에 가입하세요.
  • Standard 버전 또는 Conventional Commits 항목을 보려면 Node Tooling slack에 가입하세요.
  • Standard Version에 대해 자세히 알아보기
  • Standard Version Expo 통합
  • 에 대한 모든 것을 알아보세요.

    Edit: I made a mistake of not adding package.json to our .versionrc.js. Thanks to awinograd for spotting and fixing it!

    Cover photo by Robert Metz

    좋은 웹페이지 즐겨찾기