TypeError: (0, _schemaUtils.default) no es una función

Nov 07 2020

Tengo una aplicación React simple creada con create-react-appque funciona bien en localhost. Ahora estoy intentando Dockerify la aplicación. Aquí está mi 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"
        ]
      }
    }
  }
}

Y aquí está mi 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"]

Construyo la imagen con:

docker build --tag yeet .

Luego ejecuto la imagen como un contenedor con:

docker run --publish 3000:3000 yeet

Esto arroja:

$ docker run --publicar 3000: 3000 años

[email protected] producción / aplicación npm ejecutar build && npm run start

[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) no es una función en getOptions (/app/node_modules/eslint-webpack-plugin/dist/options.js:62:28) en el nuevo ESLintWebpackPlugin (/ app / node_modules / eslint-webpack- plugin / dist / index.js: 30: 44) en module.exports (/app/node_modules/react-scripts/config/webpack.config.js:749:7) en Object. (/app/node_modules/react-scripts/scripts/build.js:67:16) en Module._compile (internal / modules / cjs / loader.js: 1015: 30) en Object.Module._extensions..js (internal /modules/cjs/loader.js:1035:10) en Module.load (internal / modules / cjs / loader.js: 879: 32) en Function.Module._load (internal / modules / cjs / loader.js: 724 : 14) en Function.executeUserEntryPoint [como runMain] (internal / modules / run_main.js: 60: 12) en internal / main / run_main_module.js: 17: 47 npm ERR! código ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] compilación:react-scripts buildnpm ERR! Estado de salida 1 npm ERR! npm ERR! Falló en el script de compilación [email protected]. npm ERR! Probablemente esto no sea un problema con npm. Es probable que haya una salida de registro adicional arriba.

npm ERR! Se puede encontrar un registro completo de esta ejecución en: 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] producción: npm run build && npm run startnpm ERR! Estado de salida 1 npm ERR! npm ERR! Falló en el script de producción [email protected]. npm ERR! Probablemente esto no sea un problema con npm. Es probable que haya una salida de registro adicional arriba.

npm ERR! Se puede encontrar un registro completo de esta ejecución en: npm ERR!
/root/.npm/_logs/2020-11-07T12_47_03_923Z-debug.log

¿Alguien ve lo que estoy haciendo mal? ¡Cualquier sugerencia sería muy útil!

Respuestas

1 XavierLambros Nov 17 2020 at 19:18

Tuve el mismo problema. No estoy seguro de otras soluciones para eliminar o degradar bibliotecas si se ejecuta localmente.

Para resolver aquí, corrí

docker container prune
docker image prune

para asegurarme de que mi ventana acoplable esté limpia antes de comenzar a construir.

Si no tiene éxito, puede intentar eliminar yarn.locko package-lock.json.

Si puede ayudar a otros, mis archivos están

.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;
  }
}

Correr

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

Lo que me resolvió fue

  1. Degradando la dependencia "componentes con estilo" y
  2. eliminando la dependencia "redux-devtools-extension", así como
  3. Eliminando los archivos cobrados de Docker $ docker builder prune -a
LuisOsta Nov 12 2020 at 17:26

Entonces, hay dos formas de solucionar este problema:

Degradación de React 17 y react-scripts 4.0

Esto es lo que hice porque no quería expulsarme de la CRA (por razones obvias). El problema se debe a que la biblioteca de estilos que estoy usando no funciona bien con la forma actualizada en que CRA maneja Eslint.

Podría haber otros problemas, pero parece provenir de react-scripts 4.0

Esto se menciona en el registro de cambios de react-scripts 4.0

Expulsión de CRA

Como se menciona en los comentarios de @duhaime. Puede resolver este problema directamente mientras sigue usando React 17 y react-scripts 4.0 expulsando y luego eliminando el ESLintPlugin o actualizando el cargador para solucionar los problemas con cualquier biblioteca que esté usando.

Personalmente, recomendaría el primero, ya que estoy seguro de que el problema se solucionará más temprano que tarde. Pero ambas opciones te llevarán allí.

ŠtefanOndáš Nov 19 2020 at 13:37

Tuve un problema similar.

Intente reemplazar los comandos npm con yarn en su Dockerfile; resolvió mi problema.

Entonces su Dockerfile debería verse así:

# 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"]