Докер: символическая ссылка node_modules не работает для машинописного текста

#node.js #typescript #docker #express

Вопрос:

Я работаю над контейнеризацией экспресс-приложения в TS. Но не удается связать node_модули, установленные вне контейнера. Объем также монтируется для разработки.Но все равно получаю ошибку в редакторе(vscode) Cannot find module 'typeorm' or its corresponding type declarations. , аналогичную для всех зависимостей.

     volumes:
      - .:/usr/src/app
 

Докерфайл:

 FROM node:16.8.0-alpine3.13 as builder
WORKDIR /usr/src/app
COPY package.json .
COPY transformPackage.js .

RUN ["node", "transformPackage"]

FROM node:16.8.0-alpine3.13
WORKDIR /usr/src/app

COPY --from=builder /usr/src/app/package-docker.json package.json
RUN apk update amp;amp; apk upgrade

RUN npm install --quiet amp;amp; mv node_modules ../ amp;amp; ln -sf ../node_modules node_modules

COPY .  .

EXPOSE 3080

ENV NODE_PATH=./dist

RUN npm run build

CMD ["npm", "start"]
 

У меня есть один обходной путь, где я могу установить зависимости локально, а затем использовать их, но мне нужно другое решение, в котором мы должны устанавливать зависимости только в контейнере, а не снаружи.

Заранее спасибо.

Комментарии:

1. В этой (обычной настройке Docker), где у вас есть двухэтапная сборка, и первый этап каким-то образом компилирует или преобразует исходный код до его запуска на втором этапе, вы не можете использовать крепление привязки для замены кода изображения, так как это скроет преобразованный файл. Вы должны иметь возможность полностью удалить этот volumes: блок (и использовать процесс узла хоста для повседневной разработки).

Ответ №1:

Ваш первый раздел кода подразумевает, что вы используете docker-compose. Вероятно, сборка (файла Dockerfile) также выполняется там.

Дело в том, что сопоставления томов в docker-compose недоступны на этапе сборки в той же службе Docker.

Комментарии:

1. Я также создаю символическую ссылку из команды docker-compose, которая также не работает