yarn build시 에러 (페이지 열기 클릭)

yarn build시 오류 발생
Creating an optimized production build ... ✓ Compiled successfully Linting and checking validity of types ..Failed to compile. .next/types/app/(root)/auth/page.ts:2:24 Type error: File 'C:/Users/User/Desktop/A09-medi/src/app/(root)/auth/page.tsx' is not a module. 1 | // File: C:\Users\User\Desktop\A09-medi\src\app\(root)\auth\page.tsx > 2 | import * as entry from '../../../../../src/app/(root)/auth/page.js' | ^ 3 | import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js' 4 | 5 | type TEntry = typeof import('../../../../../src/app/(root)/auth/page.js') error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
JavaScript
복사
원인
이 오류는 TypeScript 컴파일 과정에서 발생한 것으로 보임.
주로 모듈 시스템과 관련된 문제일 가능성이 높다고 생각됨
해결과정
먼저, src/app/(root)/auth/page.tsx 파일에 최소한의 내용을 추가
(기존에 빈페이지였음)
'use client'; import React from 'react'; export default function AuthPage() { return ( <div> <h1>Auth Page</h1> </div> ); }
JavaScript
복사
tsconfig.json 파일을 확인하고 다음 설정이 포함되어 있는지 확인
{ "compilerOptions": { "target": "es5", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, "forceConsistentCasingInFileNames": true, "noEmit": true, "esModuleInterop": true, "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", "incremental": true, "plugins": [ { "name": "next" } ], "paths": { "@/*": ["./src/*"] } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] }
JavaScript
복사
Next.js 캐시를 삭제
rm -rf .next
JavaScript
복사
의존성을 다시 설치
yarn install
JavaScript
복사
yarn build시 오류 발생 2 (위와 같이 했으나 추가로 오류 발생)
info - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/basic-features/eslint#disabling-rules Linting and checking validity of types .Failed to compile. ./src/components/molecules/AuthPasswordInput.tsx:26:9 Type error: Type '{ id: string; type: string; value: string; onChange: (e: ChangeEvent<HTMLInputElement>) => void; placeholder: string; className: string; }' is not assignable to type 'IntrinsicAttributes & AuthInputProps'. Property 'id' does not exist on type 'IntrinsicAttributes & AuthInputProps'. 24 | <div className={relative ${className}}> 25 | <AuthInput > 26 | id={id} | ^ 27 | type={showPassword ? "text" : "password"} 28 | value={value} 29 | onChange={onChange} error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
JavaScript
복사
원인 이 오류는 AuthInput 컴포넌트에 id prop이 정의되어 있지 않아서 발생한 것으로 예상됨.
AuthPasswordInput 컴포넌트에서 AuthInputid prop을 전달하고 있지만, AuthInput 컴포넌트의 prop 타입에 id가 포함되어 있지 않아 발생하는 문제
해결과정 2
AuthInput 컴포넌트의 prop 타입을 수정한다.
src/components/atoms/AuthInput.tsx 파일을 열고 다음과 같이 수정한다.
import React from "react"; type AuthInputProps = { id?: string; // id prop 추가 type: string; value: string; onChange: (e: React.ChangeEvent<HTMLInputElement>) => void; placeholder: string; className?: string; // className을 선택적으로 만듭니다. }; export const AuthInput: React.FC<AuthInputProps> = ({ id, // id prop 추가 type, value, onChange, placeholder, className = "", // 기본값 설정 }) => ( <input id={id} // id 속성 추가 type={type} value={value} onChange={onChange} placeholder={placeholder} className={`w-full px-3 py-2 border border-gray-300 rounded-md ${className}`.trim()} /> );
JavaScript
복사
이제 AuthPasswordInput 컴포넌트에서 AuthInputid prop을 전달할 수 있음 src/components/molecules/AuthPasswordInput.tsx 파일은 그대로 두기
LoginForm 컴포넌트에서 AuthPasswordInput을 사용할 때 필요한 props를 모두 전달하지 않아서 발생하는 오류이기에 AuthPasswordInputidplaceholder props를 필요로 하지만, 현재 LoginForm에서는 이 props들을 전달하지 않고 있음을 발견
src/components/templates/auth/LoginForm.tsx 파일에서 AuthPasswordInput 부분을 다음과 같이 수정한다.
<AuthPasswordInput id="password" // id 추가 value={password} onChange={(e) => setPassword(e.target.value)} placeholder="비밀번호를 입력하세요" // placeholder 추가 />
JavaScript
복사
빌드 성공 !! 트러블 슈팅 해결 !!