Сбой компиляции Typescript (в Docker), когда NODE_ENV = production - PullRequest
0 голосов
/ 24 августа 2018

Итак, у меня есть приложение create-react-app-ts, которое я хотел бы Dockerize и разместить на Zeit Now.

Все отлично работает локально, работает yarn tsc и react-scripts-ts build отлично работает.

Создание образа Docker также отлично работает из следующего Dockerfile:

FROM mhart/alpine-node:10.9
WORKDIR /usr/src

ARG REACT_APP_API_ENDPOINT
ARG NODE_ENV

COPY yarn.lock package.json ./
RUN yarn

COPY . .
RUN yarn build && mv build /public

Однако при публикации в Now сценарий компиляции завершается неудачно при компиляции Typescript, что приводит к появлению ошибок компиляции для большинства файлов впроект.

Я могу также воспроизвести это локально, если я установлю ENV NODE_ENV production в моем Dockerfile чуть выше WORKDIR....

Так что может показаться, что Typescript или react-scripts-ts действуют иначе, когда NODE_ENV=production.Я никогда не сталкивался с этой ошибкой раньше, и я не знаю, как ее отладить.Запуск NODE_ENV=production tsc или NODE_ENV=production react-scripts-ts build также отлично работает локально.

Я использую Typescript v 3.0.1 со следующей конфигурацией:

{
  "compilerOptions": {
    "baseUrl": ".",
    "outDir": "build/dist",
    "module": "esnext",
    "target": "es6",
    "lib": ["es6", "dom", "esnext.asynciterable"],
    "sourceMap": true,
    "allowJs": true,
    "jsx": "react",
    "moduleResolution": "node",
    "rootDir": "src",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": true,
    "allowSyntheticDefaultImports": true,
    "strict": true
  },
  "exclude": ["node_modules", "build", "scripts", "acceptance-tests", "webpack", "jest", "src/setupTests.ts"]
}

Любой совет будет высоко оценен!:)

EDIT : Добавлены env var args в Dockerfile.Изначально он был оставлен для краткости, но в итоге оказался частью проблемы и решения

1 Ответ

0 голосов
/ 26 августа 2018

Итак, я наконец-то нашел проблему! В моем оригинальном Dockerfile, NODE_ENV было установлено до yarn install. Это означает, что для производственной сборки yarn не установит devDependencies и, следовательно, ни одну из моих @types библиотек. Это вызвало все ошибки компиляции по всему проекту.

Перемещение определения NODE_ENV ниже / после yarn install в Dockerfile решило проблему.

FROM mhart/alpine-node:10.9
WORKDIR /usr/src

COPY yarn.lock package.json ./
RUN yarn

ARG REACT_APP_API_ENDPOINT
ARG NODE_ENV

COPY . .
RUN yarn build && mv build /public

Примечание: Насколько я знаю, yarn build обязательно удалит devDependencies снова, так что не беспокойтесь об этом вздутии вашей сборки. :)

...