Локальная зависимость npm "не содержит файл package.json" в сборке Docker, но работает нормально при запуске npm - PullRequest
0 голосов
/ 12 октября 2019

У меня есть модуль npm, над которым я работаю локально, это зависимость в клиентском приложении.

Структура каталогов в основном следующая:

/app
  /client
    /src
      App.js
    package.json
    Dockerfile.dev
  /shared
    /contexts
      package.json
      test.js
    /hooks

My package.json isследующее:

{
  "name": "web",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "contexts": "file:../shared/contexts",
    "react": "^16.10.2",
    "react-dom": "^16.10.2",
    "react-scripts": "3.2.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

Импорт со следующими данными в client/src/App.js:

import { testImport } from 'contexts/test';

Работает, как и ожидалось, когда я запускаю npm start.

Проблема I 'm работает на работает с:

docker build -t sockpuppet/testapp -f Dockerfile.dev .

Не удается, и я получаю ошибку:

npm ERR! Could not install from "../shared/contexts" as it does not contain a package.json file.

Вот он Dockerfile.dev

FROM node:alpine
WORKDIR '/app'
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "start"]

Как следуетЯ работаю с локальными зависимостями npm?

Кроме того, добавление к изображению COPY * /shared в изображении приводит к ошибке COPY failed: Forbidden path outside the build context: ../shared/contexts ():

COPY ../shared ./

1 Ответ

0 голосов
/ 14 октября 2019

Хорошо, это работает. Я изменил свой Dockerfile.dev на следующий:

FROM node:alpine
WORKDIR '/app'
COPY ./shared /shared
COPY ./web /app
RUN npm install
CMD ["npm", "run", "start"]

Из каталога базового проекта (где находятся /shared и /web) я запускаю:

docker build -t sockpuppet/client -f ./web/Dockerfile.dev .
...