TypeError: (0, _schemaUtils.default) não é uma função
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
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
O que resolveu para mim foi
- Fazer downgrade da dependência "componentes estilizados" e
- removendo a dependência "redux-devtools-extension", bem como
- Excluindo os arquivos descontados do Docker $ docker builder prune -a
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á.
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"]