docker typescript:当我更改文件时,没有热加载

igetnqfo  于 2021-09-13  发布在  Java
关注(0)|答案(2)|浏览(297)

基本上,当我对ts文件进行更改时,它不会反映在浏览器中,也不会反映在应该显示刷新日志的控制台中。我使用nodemon来处理类型脚本的更改,所有这些都使用docker和docker compose。docker compose位于服务器文件夹之外,服务器文件夹的主文件存储在src子文件夹中
nodemon.json

{
  "watch": [
    "src",
    ".env"
  ],

  "ext": "js,ts,json",
  "ignore": [
    "src/**/*.spec.ts"
  ],
  "execMap": {
    "ts": "node --inspect=0.0.0.0:9229 --nolazy -r ts-node/register"
  }
}

packaje.json脚本

"scripts": {
    "start": "NODE_PATH=./build node build/app.js",
    "inspect": "nodemon --inspect src/app.ts",
    "dev": "nodemon src/app.ts",
    "build": "tsc -p .",
    "test": "jest"
  },

Docker

FROM node:16
RUN apt-get update
WORKDIR /usr/app
COPY . . 

RUN yarn install

docker compose仅用于服务器

server:
        container_name: server
        build: 
            context: ./server
        command: yarn run dev 
        volumes: 
            - ./server/src:/usr/app/src
            - ./server/nodemon.json:/usr/app/src/nodemon.json
llycmphe

llycmphe1#

你可以在这里尝试做几件事!
1.节点配置
在上下文中,此建议是在回顾了本教程之后得出的,本教程看起来与您正在构建的内容类似!
仔细检查nodemon配置文件的格式和名称是否正确。在帖子里,它看起来像是你给它起的名字 nodemon.js 当它被安装在docker容器中时 nodemon.json .
以及,可能扩展 src nodemon配置中的 src/**/*.ts . 我不确定要更改哪些文件以触发热重新加载,但这将告诉nodemon搜索该文件的所有子目录 src 专门用于更改typescript文件的文件夹。
2.使用传输类型脚本的替代解决方案
在过去,我使用构建的javascript在docker容器中为typescript进行热加载。这是在一个服务器上,具有与您描述的类似的目录结构。这可能是一个可行的最后手段。
以下是一些步骤:
安装 concurrently (同时运行多个命令的包)

yarn add -D concurrently

在中更新脚本 package.json ```
"scripts": {
"watch": "tsc -w", // Typescript watcher, will retranspile TS to JS in the dist folder when changes are made
"dev": "nodemon -L dist/index.js", // Runs nodemon in legacy mode, 'dist/index.js' is the file the Typescript is transpiled to
"start": "concurrently -k "npm:watch" "npm:dev"" // Runs the Typescript watcher and nodemon at the same time
}

更新撰写挂载(可以添加nodemon配置挂载,尽管这是可选的)

command:
yarn start
volumes:
./server/src:/usr/app/src

再一次,完全可以作为最后的手段。但是,通过这样做,每当您进行更改时,typescript watcher将重新传输您的代码,nodemon将在中接收这些更改 `dist` .
anhgbhbe

anhgbhbe2#

我通过将nodemon设置为在容器内部使用来解决这个问题。首先,我在全球范围内安装了nodemon

FROM node:16
RUN apt-get update
WORKDIR /usr/app
COPY . .
RUN yarn global add nodemon
RUN yarn install

然后,docker compose中的命令

command: nodemon /usr/app/src/index.js

相关问题