无法在dockerfile上构建打字稿

问题描述 投票:0回答:1

我想为打字稿/节点API设置CD管道。我正在使用Dockerfile手动将图像上传到AWS ECR,它可以按预期工作。

FROM node:11-slim
EXPOSE 8080
WORKDIR /usr/src/app
RUN mkdir /usr/src/app/src
COPY  ./node_modules node_modules
COPY  ./dist dist
COPY  ./package.json package.json
ENV PORT=8080
USER node
CMD ["node", "./dist/app.js"]

要将图像上传到AWS ECR,我正在使用以下Dockerfile:

FROM node:11-slim
EXPOSE 8080
WORKDIR /usr/src/app
RUN mkdir /usr/src/app/src
COPY  ./package.json package.json
RUN npm add -g typescript
RUN npm install tsc -g
RUN npm install
RUN sh -c tsc -p .
ENV PORT=8080
USER node
CMD ["node", "./dist/app.js"]

我使用RUN sh -c tsc -p .命令来构建我的项目。即使构建成功,它也不包含dist文件夹,该文件夹包含映像中的已构建项目。

这里是我的项目package.json文件的摘录:

"scripts": {
    "start": "node dist/app.js",
    "install": "yarn install",
    "postinstall": "tsc -p .",
    "watch": "tsc -w -p .",
    "debug": "nodemon --watch ./dist --inspect=0.0.0.0:9222 --nolazy ./dist/app.js",
    "docker-debug": "sudo tsc  && docker-compose up --build"
},

[当我使用RUN npm run postinstall时,编译器错误:missing script postinstall

typescript docker aws-codebuild
1个回答
0
投票

图像中唯一的源文件是package.json文件; tsc没有建立的空间。在COPY之前,您需要先在应用程序源的其余部分中单击RUN tsc

一个典型的Dockerfile看起来更像:

FROM node:11-slim
WORKDIR /usr/src/app

# Also copy the lock file
COPY ./package.json ./package.lock .

# typescript is a devDependencies, no need to separately install it
RUN npm install

# Copy the rest of your application in
# (include `node_modules` in a `.dockerignore` file)
COPY ./ ./

# Now build it (Docker supplies a `sh -c` wrapper for you)
RUN tsc -p .

# Runtime metadata as above
ENV PORT=8080
EXPOSE 8080
USER node
CMD ["node", "./dist/app.js"]
© www.soinside.com 2019 - 2024. All rights reserved.