Как установить пакеты рабочей области пряжи без символической ссылки? - PullRequest
2 голосов
/ 13 июня 2019

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

node_modules
packages
  shared
    test.js
    package.json
  client
    test.js
    package.json
  server
    test.js
    package.json
package.json
server.Dockerfile

Как видите, у меня есть server.Dockerfile, который создает образ сервера, который я могу выдвинуть на другойхостинг-провайдеры, такие как Heroku или AWS.

Я копирую packages и package.json в этот контейнер:

COPY packages packages
COPY package.json .

И затем устанавливаю только зависимости для пакета server:

RUN cd packages/server && yarn install

Все зависимости теперь находятся в папке node_modules, и следующее, что я думаю сделать, это удалить папку packages, чтобы удалить любой ненужный код из образа докера (например, клиента).код):

RUN rm -rf packages

Проблема в том, что все пакеты рабочего пространства пряжи в папке node_modules являются просто символическими ссылками на папку packages ... поэтому я не могу удалить эту папку.

  • Как заставить yarn install сделать копию пакетов рабочей области пряжи вместо создания символических ссылок?

  • Или есть другой способудалить весь неиспользуемый код (например, код клиента), чтобымое изображение в докере не раздуто?

РЕДАКТИРОВАТЬ: этот вопрос не о докере, поэтому я не уверен, стоит ли включать его в теги

Ответы [ 2 ]

1 голос
/ 12 июля 2019

Вы можете использовать yarn-workspace-isolator , чтобы извлечь пакет с его локальными зависимостями, чтобы избежать публикации их в npm, если вы этого не хотите.

isolate-workspace -w my-package -o ~/dist/my-package

Теперь,как сказано в документе:

Вы можете просто запустить yarn install внутри ~/dist/my-package, и yarn установит все зависимости, как если бы вы вообще не использовали рабочие пространства, не публикуя никаких зависимостей рабочей области.

1 голос
/ 12 июля 2019

Запуск установки пряжи в рабочих пространствах делает то же самое внутри любого пакета или корневого каталога. Он устанавливает модули для каждого пакета и создает ссылки на них и т. Д.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...