programing

도커 이미지를 빌드할 때 이미 설치된 경우 유형 스크립트를 설치하라는 메시지가 표시됨

goodsources 2023. 7. 10. 22:17
반응형

도커 이미지를 빌드할 때 이미 설치된 경우 유형 스크립트를 설치하라는 메시지가 표시됨

Typescript를 사용하는 Next.js/React 응용 프로그램의 도커 이미지를 구축하려고 합니다.

유형 스크립트가 설치되어 있으며 도커 없이 로컬로 빌드를 실행할 수 있습니다.

그러나 도커 이미지가 구축되면서 다음과 같은 점에 도달했습니다.

Step 8/10 : RUN npm run build
 ---> Running in ee577c719739

> project@0.0.5 build /app
> next build

Creating an optimized production build...
Attention: Next.js now collects completely anonymous telemetry regarding usage.
This information is used to shape Next.js' roadmap and prioritize features.
You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:
https://nextjs.org/telemetry

It looks like you're trying to use TypeScript but do not have the required package(s) installed.

Please install typescript by running:

        npm install --save-dev typescript

If you are not trying to use TypeScript, please remove the tsconfig.json file from your package root (and any TypeScript files).

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! project@0.0.5 build: `next build`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the project@0.0.5 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Typescript를 이미 설치했습니다.이것은 저에게 매우 혼란스럽습니다.

제가 사용하는 도커 이미지는 다음과 같습니다.

FROM gcr.io/companyX/companyX-node-base:12-alpine

# Copy in the project files
COPY . .

# Clean
USER root
RUN rm -fr node_modules

ENV NODE_ENV=production

COPY package*.json ./

RUN npm install && \
    npm cache clean --force

RUN npm run build

EXPOSE 3000

# Running the app
CMD [ "npm", "start" ]

실행할 때(도커 외부에서도 실행 가능)

export NODE_ENV=production
npm install

설치만 하면 됩니다.dependencies당신의package.json그리고 그가 아닌devDependencies반면에, 당신은 아마도 필요할 것입니다.devDependencies같은 도구를 얻기 위해typescript.

여기서 좋은 해결책은 다단계 빌드를 사용하는 것입니다.첫 번째 단계에서는 모든 종속성을 설치하고, 두 번째 단계에서는 응용프로그램을 실행하는 데 필요한 항목만 복사합니다.

FROM gcr.io/companyX/companyX-node-base:12-alpine AS build

# Copy in only the parts needed to install dependencies
# (This avoids rebuilds if the package.json hasn’t changed)
COPY package.json package.lock .

# Install dependencies (including dev dependencies)
RUN npm install

# Copy in the rest of the project
# (include node_modules in a .dockerignore file)
COPY . .

# Build the project
RUN npm run build

# Second stage: runtime
FROM gcr.io/companyX/companyX-node-base:12-alpine

ENV NODE_ENV=production

# Again get dependencies, but this time only install
# runtime dependencies
COPY package.json package.lock .
RUN npm install

# Get the built application from the first stage
COPY --from=build /app/dist dist

# Set runtime metadata
EXPOSE 3000
CMD [ "npm", "start" ]
# CMD ["node", "dist/index.js"]

이 방법은 호스트의 임의 콘텐츠로 응용 프로그램 콘텐츠를 덮어쓰거나 Docker 볼륨에 라이브러리를 저장하려는 설정과 호환되지 않습니다.최종 이미지는 자체적으로 포함되어 호스트 콘텐츠가 필요하지 않으며 소스 코드를 별도로 복사하지 않고 다른 시스템에서 그대로 실행할 수 있습니다.

AWS Amplify에 Next.js 앱을 배포할 때 동일한 오류가 발생하여 유형 스크립트를 개발 종속성에서 종속성으로 이동하고 싶지 않았습니다.

내 해결책은 빌드 설정을 변경하는 것이었습니다.npm install
로.npm install --dev typescript && npm install

도커에 빌드 설정을 위한 동일한 위치가 있어야 합니다.

그러면 오류가 제거됩니다.

운영 환경에서는 devDependencies를 설치하지 않습니다.설정할 수 있습니다.NODE_ENVnpm 설치 후

FROM gcr.io/companyX/companyX-node-base:12-alpine

# Copy in the project files
COPY . .

# Clean
USER root
RUN rm -fr node_modules

COPY package*.json ./

RUN npm install && \
    npm cache clean --force

ENV NODE_ENV=production

RUN npm run build

EXPOSE 3000

# Running the app
CMD [ "npm", "start" ]

@Ahmed Rebai에 대한 크레딧

패키지의 종속성에 유형 스크립트를 수동으로 추가해야 했습니다.json 파일.일반적인 npm 설치는 dev에만 추가됩니다.

언급URL : https://stackoverflow.com/questions/59682961/asked-to-install-typescript-when-already-installed-when-building-docker-image

반응형