NestJs 不在 Docker 内部进行热重载工作

1 node.js docker docker-compose nestjs

最小复制代码

示例代码

重现步骤
  1. npm 安装
  2. 码头工人组成
预期行为

等待docker容器创建并运行nest,修改main.ts文件,nest监听不执行热重加载

包.json
"dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  }
Run Code Online (Sandbox Code Playgroud)
Dockerfile
###################
# BUILD FOR LOCAL DEVELOPMENT
###################

FROM node:18-alpine As development

WORKDIR /usr/src/app

COPY --chown=node:node package*.json ./

RUN npm ci

COPY --chown=node:node . .

USER node
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
###################
# BUILD FOR LOCAL DEVELOPMENT
###################

FROM node:18-alpine As development

WORKDIR /usr/src/app

COPY --chown=node:node package*.json ./

RUN npm ci

COPY --chown=node:node . .

USER node
Run Code Online (Sandbox Code Playgroud)

在docker容器中使用监听模式,并绑定volume,但是修改src下的文件,nest不执行热重载

小智 9

从 typesript 4.9 开始,观察程序使用系统\xe2\x80\x99s 本机事件检查文件更改以进行文件更改:请参阅版本
\n我在 Windows 上使用 docker 时遇到了同样的问题(安装卷内容)

\n

我在 Nest 中没有找到任何参数来直接强制使用旧模式。但是,如果您在项目中使用 typescript 编译器 ( tsc ),则可以使用配置文件覆盖默认配置。就我而言,它是“tsconfig.build.json”

\n

您可以更新配置文件以强制打字稿以不同方式观看,如下所示:

\n
"watchOptions": {\n    // Use a dynamic polling instead of system\xe2\x80\x99s native events for file changes.\n    "watchFile": "dynamicPriorityPolling",\n    "watchDirectory": "dynamicPriorityPolling",\n    "excludeDirectories": [\n      "**/node_modules",\n      "dist"\n    ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

您可以在文档中查看其他选项。我尝试了“fixedPollingInterval”,但 CPU 使用率很高。现在,dynamicPriorityPolling 可以完成这项工作。

\n