在 dockerfile 中编译打字稿代码不起作用(找不到名称“进程”)

Mau*_*ino 2 node.js typescript docker

我有以下 Dockerfile:

FROM node:latest
WORKDIR /usr/src/app

ENV NODE_ENV=production

COPY package*.json .
    
RUN npm install && npm i -g typescript

COPY . .

RUN  tsc

CMD [ "node", "./dist/index.js" ]
Run Code Online (Sandbox Code Playgroud)

以及以下内容package.json

FROM node:latest
WORKDIR /usr/src/app

ENV NODE_ENV=production

COPY package*.json .
    
RUN npm install && npm i -g typescript

COPY . .

RUN  tsc

CMD [ "node", "./dist/index.js" ]
Run Code Online (Sandbox Code Playgroud)

当我尝试构建图像时,出现以下错误:

Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会发生这种情况?我已经@types/node安装了。

Exp*_*ten 6

devDependencies不会安装用于生产模式。

所以你可以:

  • 将这些包移至dependencies
  • 删除NODE_ENV环境变量或
  • 使用多阶段构建,您将在第一阶段构建 TypeScript(保持依赖关系不变,但production这里不需要),并在第二阶段使用 JS 文件(devDependencies这里不需要,所以,production将起作用)。