TypeError: (0, _schemaUtils.default) não é uma função

Nov 07 2020

Eu tenho um aplicativo React simples criado com create-react-appque funciona bem no localhost. Agora estou tentando encaixar o aplicativo. Aqui está meu package.json:

{
  "name": "yeet",
  "version": "0.1.0",
  "engines": {
    "node": "12.x"
  },
  "scripts": {
    "client": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "start": "node server.js",
    "production": "npm run build && npm run start"
  },
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.11.4",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "axios": "^0.21.0",
    "body-parser": "^1.19.0",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "express-session": "^1.17.1",
    "mongoose": "^5.10.13",
    "mysql": "^2.18.1",
    "react": "^17.0.1",
    "react-dom": "^17.0.1",
    "react-scripts": "4.0.0",
    "web-vitals": "^0.2.4"
  },
  "devDependencies": {
    "babel-core": "*",
    "babel-loader": "*",
    "babel-preset-es2015": "*",
    "babel-preset-react": "*",
    "babel-preset-stage-0": "*"
  },
  "babel": {
    "presets": [
      "@babel/env",
      "@babel/react",
      "babel-preset-stage-0"
    ],
    "env": {
      "start": {
        "presets": [
          "@babel/env",
          "@babel/react",
          "babel-preset-stage-0"
        ]
      }
    }
  }
}

E aqui está meu Dockerfile:

# Specify base image
FROM node:12.19.0-alpine3.10

# Specify app location in host
WORKDIR /app

# Copy the dependency list
COPY package.json ./

# Install app dependencies
RUN npm install

# Copy app code to host
COPY . .

# Open specified port
EXPOSE 3000:3000

# Start the app
CMD ["npm", "run", "production"]

Eu construo a imagem com:

docker build --tag yeet .

Em seguida, executo a imagem como um contêiner com:

docker run --publish 3000:3000 yeet

Isso gera:

$ docker run --publish 3000: 3000 yeet

[email protected] produção / app npm executar compilação && npm executar iniciar

[email protected] build / app react-scripts build

/app/node_modules/eslint-webpack-plugin/dist/options.js:62 (0, _schemaUtils.default) (_ options.default, options, {^

TypeError: (0, _schemaUtils.default) não é uma função em getOptions (/app/node_modules/eslint-webpack-plugin/dist/options.js:62:28) em novo ESLintWebpackPlugin (/ app / node_modules / eslint-webpack- plugin / dist / index.js: 30: 44) em module.exports (/app/node_modules/react-scripts/config/webpack.config.js:749:7) em Object. (/app/node_modules/react-scripts/scripts/build.js:67:16) em Module._compile (internal / modules / cjs / loader.js: 1015: 30) em Object.Module._extensions..js (interno /modules/cjs/loader.js:1035:10) em Module.load (internal / modules / cjs / loader.js: 879: 32) em Function.Module._load (internal / modules / cjs / loader.js: 724 : 14) em Function.executeUserEntryPoint [como runMain] (internal / modules / run_main.js: 60: 12) em internal / main / run_main_module.js: 17: 47 npm ERR! código ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] build:react-scripts buildnpm ERR! Status de saída 1 npm ERR! npm ERR! Falha no script de compilação [email protected]. npm ERR! Isso provavelmente não é um problema com o npm. Provavelmente, há uma saída de registro adicional acima.

npm ERR! Um registro completo dessa execução pode ser encontrado em: npm ERR!
/root/.npm/_logs/2020-11-07T12_47_03_927Z-debug.log npm ERR! código ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] produção: npm run build && npm run startnpm ERR! Status de saída 1 npm ERR! npm ERR! Falha no script de produção [email protected]. npm ERR! Isso provavelmente não é um problema com o npm. Provavelmente, há uma saída de registro adicional acima.

npm ERR! Um registro completo dessa execução pode ser encontrado em: npm ERR!
/root/.npm/_logs/2020-11-07T12_47_03_923Z-debug.log

Alguém vê o que estou fazendo de errado? Qualquer sugestão seria muito útil!

Respostas

1 XavierLambros Nov 17 2020 at 19:18

Eu tive o mesmo problema. Não tenho certeza sobre outras soluções com a remoção ou downgrade de bibliotecas se for executado localmente.

Para resolver aqui, corri

docker container prune
docker image prune

para ter certeza de que meu docker está limpo antes de começar a construir.

Se não tiver sucesso, você pode tentar excluir yarn.lockou package-lock.json.

Se pode ajudar outras pessoas, meus arquivos são

.dockerignore

.git
.gitignore
node_modules
build

Dockerfile.dev

FROM node:alpine

WORKDIR /app

COPY package.json /app

RUN yarn install

COPY . .

CMD ["yarn", "start"]

docker-compose.dev.yml

version: "3.8"
services:
  print:
    stdin_open: true
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - "3000:3000"
    volumes:
      - ".:/app"
      - "/app/node_modules"

Dockerfile.prod

FROM node:alpine as build

WORKDIR /app

COPY package.json /app

RUN yarn install

COPY . /app

RUN yarn run build

FROM nginx:stable-alpine
COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/build /usr/share/nginx/html

docker-compose.prod.yml

version: "3.8"
services:
  print:
    stdin_open: true
    build:
      context: .
      dockerfile: Dockerfile.prod
    ports:
      - "80:80"

nginx.conf

server {  
  listen 80;
  server_name frontend;
  location / {
    root /usr/share/nginx/html;
    index index.html;
    try_files $uri /index.html;
  }
}

Para correr

docker-compose.exe -f .\docker-compose.yml up --build
AlexMäder Nov 10 2020 at 17:56

O que resolveu para mim foi

  1. Fazer downgrade da dependência "componentes estilizados" e
  2. removendo a dependência "redux-devtools-extension", bem como
  3. Excluindo os arquivos descontados do Docker $ docker builder prune -a
LuisOsta Nov 12 2020 at 17:26

Portanto, existem duas maneiras de corrigir esse problema:

Downgrade do React 17 e react-scripts 4.0

Isso é o que eu fiz, já que não queria ser expulso do CRA (por motivos óbvios). O problema é que a biblioteca de estilos que estou usando não combina bem com a maneira atualizada com que o CRA lida com o Eslint.

Podem ser outros problemas, mas parece vir do react-scripts 4.0

Isso é mencionado no changelog para react-scripts 4.0

Ejetando fora do CRA

Conforme mencionado nos comentários de @duhaime. Você pode resolver esse problema diretamente enquanto ainda usa o React 17 e os react-scripts 4.0, ejetando e removendo o ESLintPlugin ou atualizando o carregador para corrigir os problemas com qualquer biblioteca que você estiver usando.

Eu recomendaria pessoalmente o primeiro, pois tenho certeza de que o problema será corrigido mais cedo ou mais tarde. Mas ambas as opções o levarão lá.

ŠtefanOndáš Nov 19 2020 at 13:37

Eu tive um problema semelhante.

Tente substituir os comandos npm por yarn em seu Dockerfile - isso resolveu meu problema.

Portanto, seu Dockerfile deve ter a seguinte aparência:

# Specify base image
FROM node:12.19.0-alpine3.10

# Specify app location in host
WORKDIR /app

# Copy the dependency list
COPY package.json ./

# Install app dependencies
RUN yarn install

# Copy app code to host
COPY . .

# Open specified port
EXPOSE 3000:3000

# Start the app
CMD ["yarn", "run", "start", "production"]