首页 > 解决方案 > TypeError: (0 , _schemaUtils.default) 不是函数

问题描述

我创建了一个简单的 React 应用程序create-react-app,它在 localhost 上运行良好。我现在正在尝试 Dockerify 应用程序。这是我的 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"
        ]
      }
    }
  }
}

这是我的 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"]

我用以下方式构建图像:

docker build --tag yeet .

然后我将图像作为容器运行:

docker run --publish 3000:3000 yeet

这抛出:

$ docker run --publish 3000:3000 年

yeet@0.1.0 生产 /app npm run build && npm run start

yeet@0.1.0 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) is not a function at getOptions (/app/node_modules/eslint-webpack-plugin/dist/options.js:62:28) at new ESLintWebpackPlugin (/app/node_modules/eslint-webpack- plugin/dist/index.js:30:44) 在 module.exports (/app/node_modules/react-scripts/config/webpack.config.js:749:7) 在 Object. (/app/node_modules/react-scripts/scripts/build.js:67:16) 在 Module._compile (internal/modules/cjs/loader.js:1015:30) 在 Object.Module._extensions..js (internal /modules/cjs/loader.js:1035:10) 在 Module.load (internal/modules/cjs/loader.js:879:32) 在 Function.Module._load (internal/modules/cjs/loader.js:724 :14) 在 Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12) 在 internal/main/run_main_module.js:17:47 npm 错误!代码 ELIFECYCLE npm 错误!errno 1 npm 错误!yeet@0.1.0 构建:react-scripts build npm 错误!退出状态 1 npm ERR!npm 错误!yeet@0.1.0 构建脚本失败。npm 错误!这可能不是 npm 的问题。上面可能有额外的日志输出。

npm 错误!可以在以下位置找到此运行的完整日志:npm ERR!
/root/.npm/_logs/2020-11-07T12_47_03_927Z-debug.log npm 错误!代码 ELIFECYCLE npm 错误!errno 1 npm 错误!yeet@0.1.0 生产:npm run build && npm run startnpm ERR!退出状态 1 npm ERR!npm 错误!yeet@0.1.0 生产脚本失败。npm 错误!这可能不是 npm 的问题。上面可能有额外的日志输出。

npm 错误!可以在以下位置找到此运行的完整日志:npm ERR!
/root/.npm/_logs/2020-11-07T12_47_03_923Z-debug.log

有谁看到我做错了什么?任何指针都会非常有帮助!

标签: node.jsreactjsdockerbabeljscreate-react-app

解决方案


我确实有同样的问题。如果它在本地运行,我不确定其他删除或降级库的解决方案。

为了解决这里,我跑了

docker container prune
docker image prune

在开始构建之前确保我的码头是干净的。

如果不成功可以尝试删除yarn.lockpackage-lock.json

如果它可以帮助别人,我的文件是

.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

码头工人-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;
  }
}

跑步

docker-compose.exe -f .\docker-compose.yml up --build

推荐阅读