패키지 업데이트 후 빌드 에러

이 글의 성격은 무엇인가요?

질문 / 문제 해결

내용을 설명해주세요

패키지 업데이트 후 빌드 에러가 발생합니다..!
참고 할 수 있는 문서가 있을까요?

에러 상황

 ERROR  SyntaxError: Invalid RegExp: Invalid escape, js engine: hermes
 LOG  Running "shared" with {"initialProps":{"initialColorPreference":"light","loadingStartTs":1770262249843,"initialFontScale":"115"},"rootTag":11}
 ERROR  Invariant Violation: "shared" has not been registered. This can happen if:
* Metro (the local dev server) is run from the wrong folder. Check if Metro is running, stop it and restart it in the current project.
* A module failed to load due to an error and `AppRegistry.registerComponent` wasn't called., js engine: hermes

package.json

    "@granite-js/native": "0.1.34",
    "react": "18.2.0",
    "react-native": "0.72.6",
    "@apps-in-toss/framework": "^1.5.3",

    "@granite-js/plugin-router": "0.1.34",
    "@granite-js/plugin-hermes": "0.1.34",
    "babel-preset-granite": "0.1.34",

_app.tsx / granite.config.ts

//_app.tsx
import React, { PropsWithChildren, Suspense } from 'react';

import { Analytics } from '@apps-in-toss/framework';
import { Granite, InitialProps } from '@granite-js/react-native';
import { QueryClientProvider } from '@tanstack/react-query';
import { TDSProvider } from '@toss/tds-react-native';

import { context } from '../require.context';
import Loading from './components/commons/Loading';
import { QueryErrorBoundary } from './components/commons/QueryErrorBoundary';
import { queryClient } from './configs/query-config';

function AppContainer({ children }: PropsWithChildren<InitialProps>) {
    Analytics.init({
        logger(params) {},
    });

    return (
        <QueryClientProvider client={queryClient}>
            <QueryErrorBoundary>
                <Suspense fallback={<Loading />}>
                    <TDSProvider colorPreference={'light'}>{children}</TDSProvider>
                </Suspense>
            </QueryErrorBoundary>
        </QueryClientProvider>
    );
}

// TODO: 운영 적용
export default Granite.registerApp(AppContainer, {
    appName: 'safejibsa-dev',
    context,
});

//granite.config.ts
import { appsInToss } from '@apps-in-toss/framework/plugins';
import { hermes } from '@granite-js/plugin-hermes';
import { router } from '@granite-js/plugin-router';
import { defineConfig } from '@granite-js/react-native/config';

export default defineConfig({
    scheme: 'granite',
    appName: 'safejibsa-dev',
    plugins: [
        appsInToss({
            permissions: [
                {
                    name: 'clipboard',
                    access: 'read',
                },
                {
                    name: 'clipboard',
                    access: 'write',
                },
                {
                    name: 'contacts',
                    access: 'read',
                },
                {
                    name: 'photos',
                    access: 'read',
                },
                {
                    name: 'camera',
                    access: 'access',
                },
                {
                    name: 'geolocation',
                    access: 'access',
                },
            ],
            brand: {
                displayName: '안전집사(개발)',
                primaryColor: '#1B64DA',
                icon: 'https://static.toss.im/appsintoss/51/ca2ce529-ed84-40de-b80d-3a4a1cc7a31c',
            },
            navigationBar: {
                withHomeButton: false,
                withBackButton: true,
            },
        }),
        router(),
        hermes(),
    ],
});

일단 이전 버전으로 롤백하였습니다.

안녕하세요 :slight_smile:
granite 로 스캐폴딩한 _app.tsx는 아래와 같아요 !

granite.config.ts도 같이 공유드립니다

import { appsInToss } from '@apps-in-toss/framework/plugins';
import { defineConfig } from '@granite-js/react-native/config';

export default defineConfig({
  scheme: 'intoss',
  appName: 'my-granite-app',
  plugins: [
    appsInToss({
      brand: {
        displayName: 'my-granite-app', // 화면에 노출될 앱의 한글 이름으로 바꿔주세요.
        primaryColor: '#3182F6', // 화면에 노출될 앱의 기본 색상으로 바꿔주세요.
        icon: "", // 화면에 노출될 앱의 아이콘 이미지 주소로 바꿔주세요.
      },
      permissions: [],
    }),
  ],
});

혹시 아래 패키지는 이제 설치가 불가한걸까요? (일단 코드상에서는 해당 의존성에서 “@toss/tds-react-native” 이 의존성으로 마이그레이션을 해주었는데요.)

"@toss-design-system/colors": "^0.0.1",
"@toss-design-system/react-native": "^1.2.1",
  • npm install 과정에서 아래와 같은 에러가 발생 하였고,

  • 해당 의존성을 제거하고 npm install 후 빌드시 아래와 같은 에러가 발생하네요.

이 문서 참고해서 마이그레이션 진행 부탁드려요. @toss-design-system/* 는 공식 출시 이전에 제공되었던 패키지로 더 이상 지원되지 않습니다 :bow:

빠른 답변 주셔서 감사합니다.ㅠㅠ

다만 가이드 주신 마이그레이션을 진행 중에서는 큰 변경점이나 파일이 수정되진 않았구요.

이 yarn tds-migrate all --path “.” 명령어에서는 아래 에러가 발생합니다.

아래는 현재의 pacake.json 이구요.


{
  "name": "safejibsa",
  "private": true,
  "scripts": {
    "dev": "granite dev",
    "start": "granite start",
    "build": "granite build",
    "test": "jest --passWithNoTests",
    "typecheck": "tsc --noEmit"
  },
  "dependencies": {
    "@apps-in-toss/framework": "^1.5.3",
    "@granite-js/native": "0.1.34",
    "@granite-js/react-native": "0.1.34",
    "@hookform/resolvers": "^4.1.0",
    "@tanstack/react-query": "^5.66.0",
    "@toss/tds-react-native": "^1.3.8",
    "@toss/utils": "^1.6.1",
    "@types/uuid": "^10.0.0",
    "es-toolkit": "^1.32.0",
    "react": "18.2.0",
    "react-error-boundary": "^5.0.0",
    "react-hook-form": "^7.54.2",
    "react-native": "0.72.6",
    "react-native-chart-kit": "^6.12.0",
    "react-native-gifted-charts": "^1.4.65",
    "react-native-linear-gradient": "^2.8.3",
    "react-native-toast-message": "^2.2.1",
    "usehooks-ts": "^3.1.1",
    "zod": "^3.24.2",
    "zustand": "^5.0.3"
  },
  "devDependencies": {
    "@babel/core": "7.23.9",
    "@babel/plugin-proposal-class-properties": "^7.16.7",
    "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7",
    "@babel/plugin-proposal-numeric-separator": "^7.16.7",
    "@babel/plugin-proposal-optional-chaining": "^7.16.7",
    "@babel/plugin-proposal-private-methods": "^7.18.6",
    "@babel/plugin-proposal-private-property-in-object": "^7.18.6",
    "@babel/plugin-transform-flow-strip-types": "^7.19.0",
    "@babel/preset-env": "^7.15.0",
    "@babel/preset-react": "^7.16.7",
    "@babel/preset-typescript": "^7.16.7",
    "@babel/runtime": "7.18.9",
    "@granite-js/plugin-router": "0.1.32",
    "@testing-library/react-native": "^12.9.0",
    "@toss/tds-migration": "^0.0.1",
    "@types/babel__core": "^7.20.5",
    "@types/jest": "^29.5.14",
    "@types/node": "^22.10.2",
    "@types/react": "18.3.3",
    "eslint": "^9.25.1",
    "eslint-plugin-import": "^2.31.0",
    "jest": "^29.7.0",
    "prettier": "^3.5.3",
    "react-test-renderer": "18.2.0",
    "typescript": "^5.7.2"
  }
}

어제도 계속 같은 에러가 발생하다가, 아래의 의존성 설치후(?) 빌드가 정상적으로 되었던 부분이 있습니다..

물론 코드상에서는 해당 의존성을 참조해서 사용된 부분은 없었습니다.

같은 에러로 개발을 못 하고 있습니다 ㅠㅠㅠㅠㅠ

npm create granite-app 로 설치되는 프로젝트의 _app.tsx 에서는 다음 과 같이 초기화 되고 있는데, 뭐가 맞는 코드인가요? Granite.registerApp 이렇게 사용되고 있습니다.

import React, { type PropsWithChildren } from 'react';
import { Granite, type InitialProps } from '@granite-js/react-native';
import { context } from '../require.context';

function AppContainer({ children }: PropsWithChildren<InitialProps>) {
  return <>{children}</>;
}

export default Granite.registerApp(AppContainer, {
  appName: 'test',
  context,
});

@minsoo-web 님이 확인해주실 예정입니다 :bow:

테스트로 해당 패키지 에 대한 권한을 풀어주실 수 없을까요. 어제도 같은 상황에서 해당 패키지 설치시 되었었거든요.

혹시 어제 오늘 중에 해당 패키지에 대한 권한 설정이 바뀌었던거에요?

안녕하세요, 해당 에러 마이그레이션 패키지의 문제가 있어서 버전업 되었습니다.

0.0.2 로 버전업 하신 뒤 마이그레이션 다시 시도해봐주시겠어요?

마이그레이션에서는 변경된 파일이 없네요!……..; 하하;;ㅠㅠㅠ

남겨주신 package.json 에는 toss-design-system scope 의 패키지가 안 보이는데, 마이그레이션이 필요하신 상황일까요?

마이그레이션이 필요한 상태인지 아니면 롤백을 해야하는지? 파악이 어렵습니다.

@toss-design-system/react-native 를 사용했던 버전에서는 빌드 에러가 없었는데, 마이그레이션이 된 후에 빌드 시 해당 에러로 인해.. 개발 진행을 못하고 있네요;

어제도 같은 상황이였어서, @toss-design-system/react-native 를 사용하는 버전으로 롤백을 했었는데, 오늘은 @toss-design-system/react-native 설치 권한이 없어졌는지 다시 테스트가 불가 하네요.

지금 상황에서는 마이그레이션이 완료된 상태로 보이고 하지만, 터미널에서는 아래 에러가 발생하고,

 ERROR  SyntaxError: Invalid RegExp: Invalid escape, js engine: hermes
 LOG  Running "shared" with {"initialProps":{"initialColorPreference":"light","loadingStartTs":1770363489716,"initialFontScale":"115"},"rootTag":881}
 ERROR  Invariant Violation: "shared" has not been registered. This can happen if:
* Metro (the local dev server) is run from the wrong folder. Check if Metro is running, stop it and restart it in the current project.
* A module failed to load due to an error and `AppRegistry.registerComponent` wasn't called., js engine: hermes

기기 화면상에는 다음과 같은 에러가 발생합니다.

패키지 업데이트 이전에는 @toss-design-system/react-native를 사용하고 계셨나요?

업데이트 이전의 package.json과 업데이트 이후의 package.json을 함께 볼 수 있을까요?

네, 로컬에 설치는 되어 있었고 이번 빌드 에러 발견 이전에는 npm install 을 하지 않았어서, 영향이 없었나 봅니다.

혹시 “@toss-design-system/colors”: “^0.0.1”, “@toss-design-system/react-native”: “^1.2.1”, 이 패키지들의 설치 권한이 언제 회수 되었었을까요?

  • 업데이트 전
{
  "name": "safejibsa",
  "private": true,
  "scripts": {
    "dev": "granite dev",
    "start": "granite start",
    "build": "granite build",
    "test": "jest --passWithNoTests",
    "typecheck": "tsc --noEmit"
  },
  "dependencies": {
    "@apps-in-toss/framework": "^1.5.3",
    "@granite-js/native": "0.1.32",
    "@granite-js/react-native": "0.1.32",
    "@hookform/resolvers": "^4.1.0",
    "@tanstack/react-query": "^5.66.0",
    "@toss-design-system/colors": "^0.0.1",
    "@toss-design-system/react-native": "^1.2.1",
    "@toss/tds-react-native": "^1.3.3",
    "@toss/utils": "^1.6.1",
    "es-toolkit": "^1.32.0",
    "react": "18.2.0",
    "react-error-boundary": "^5.0.0",
    "react-hook-form": "^7.54.2",
    "react-native": "0.72.6",
    "react-native-chart-kit": "^6.12.0",
    "react-native-gifted-charts": "^1.4.65",
    "react-native-linear-gradient": "^2.8.3",
    "react-native-toast-message": "^2.2.1",
    "usehooks-ts": "^3.1.1",
    "zod": "^3.24.2",
    "zustand": "^5.0.3"
  },
  "devDependencies": {
    "@babel/core": "7.23.9",
    "@babel/plugin-proposal-class-properties": "^7.16.7",
    "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7",
    "@babel/plugin-proposal-numeric-separator": "^7.16.7",
    "@babel/plugin-proposal-optional-chaining": "^7.16.7",
    "@babel/plugin-proposal-private-methods": "^7.18.6",
    "@babel/plugin-proposal-private-property-in-object": "^7.18.6",
    "@babel/plugin-transform-flow-strip-types": "^7.19.0",
    "@babel/preset-env": "^7.15.0",
    "@babel/preset-react": "^7.16.7",
    "@babel/preset-typescript": "^7.16.7",
    "@babel/runtime": "7.18.9",
    "@granite-js/plugin-router": "0.1.32",
    "@testing-library/react-native": "^12.9.0",
    "@types/babel__core": "^7.20.5",
    "@types/jest": "^29.5.14",
    "@types/node": "^22.10.2",
    "@types/react": "18.3.3",
    "@types/uuid": "^10.0.0",
    "eslint": "^9.25.1",
    "eslint-plugin-import": "^2.31.0",
    "jest": "^29.7.0",
    "prettier": "^3.5.3",
    "react-test-renderer": "18.2.0",
    "typescript": "^5.7.2"
  }
}

  • 업데이트 후
{
  "name": "safejibsa",
  "private": true,
  "scripts": {
    "dev": "granite dev",
    "start": "granite start",
    "build": "granite build",
    "test": "jest --passWithNoTests",
    "typecheck": "tsc --noEmit"
  },
  "dependencies": {
    "@apps-in-toss/framework": "^1.9.2",
    "@granite-js/native": "0.1.34",
    "@granite-js/react-native": "0.1.34",
    "@hookform/resolvers": "^4.1.0",
    "@tanstack/react-query": "^5.66.0",
    "@toss/tds-colors": "^0.1.0",
    "@toss/tds-react-native": "^1.3.8",
    "@toss/utils": "^1.6.1",
    "add": "^2.0.6",
    "dayjs": "^1.11.19",
    "es-toolkit": "^1.32.0",
    "pnpm": "^10.28.2",
    "react": "18.2.0",
    "react-error-boundary": "^5.0.0",
    "react-hook-form": "^7.54.2",
    "react-native": "0.72.6",
    "react-native-chart-kit": "^6.12.0",
    "react-native-gifted-charts": "^1.4.65",
    "react-native-linear-gradient": "^2.8.3",
    "react-native-toast-message": "^2.2.1",
    "usehooks-ts": "^3.1.1",
    "zod": "^3.24.2",
    "zustand": "^5.0.3"
  },
  "devDependencies": {
    "@babel/core": "7.28.5",
    "@babel/runtime": "7.28.4",
    "@eslint/js": "^9.17.0",
    "@testing-library/react-native": "^12.9.0",
    "@toss/tds-migration": "^0.0.2",
    "@types/babel__core": "^7.20.5",
    "@types/jest": "^29.5.14",
    "@types/node": "^22.10.2",
    "@types/react": "18.3.3",
    "@types/uuid": "^10.0.0",
    "babel-preset-granite": "0.1.34",
    "eslint": "^9.17.0",
    "eslint-plugin-import": "^2.31.0",
    "eslint-plugin-react": "^7.37.2",
    "jest": "^29.7.0",
    "prettier": "3.4.2",
    "react-test-renderer": "18.2.0",
    "typescript": "^5.8.3"
  }
}

1월 30일입니다. 업데이트 후에 빌드시 발생하는 에러를 다시 한 번만 첨부해봐주실 수 있으실까요

pnpm create granite-app 새로운 프로젝트를 초기화 하여 기존 소스코드 옮겨서 테스트를 해보니 발생하지 않던 에러가 발생하여 해결 하니 빌드 되네요…

(es-toolkit/compat 에 대한 의존성에 대한 에러가 발생하였고 해당 의존성 제거)

아직 먼저 문의 드린 이전에 프로젝트에서는 적용해보지 못한 상태입니다.

빌드 에러가 나던 기존 프로젝트에서 es-toolkit/compat 의존성 제거하니 빌드 되었습니다……..감사합니다……

1개의 좋아요