TypeError: (0 , _schemaUtils.default) 不是函数

Posted

技术标签:

【中文标题】TypeError: (0 , _schemaUtils.default) 不是函数【英文标题】:TypeError: (0 , _schemaUtils.default) is not a function 【发布时间】:2021-02-19 23:12:57 【问题描述】:

我有一个使用 create-react-app 创建的简单 React 应用程序,它在 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

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

yeet@0.1.0 构建 /app 反应脚本构建

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

在 getOptions (/app/node_modules/eslint-webpack-plugin/dist/options.js:62:28) 在新的 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) 在对象。 (/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 错误!代码 生命周期 npm 错误! errno 1 npm 错误! yeet@0.1.0 生产:npm run build && npm run start npm 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

有人看到我做错了吗?任何指针都会非常有帮助!

【问题讨论】:

哇,我弹出然后从webpack.config.js 中删除了ESLintPlugin 插件,解决了这个错误。 我遇到了类似的问题。我认为这与新版本的 react-scripts 有关 你用什么做造型? (CSS、SASS 等) 我只是在使用准系统 CSS 【参考方案1】:

我也有类似的问题。

尝试在您的 Dockerfile 中用 yarn 替换 npm 命令 - 它解决了我的问题。

所以你的 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 yarn install

# Copy app code to host
COPY . .

# Open specified port
EXPOSE 3000:3000

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

【讨论】:

这是解决“缓存问题”的幸运解决方法,因为它也与 npm 一起运行。 我同意,正如你所写的那样。 npm 缓存清理 --force【参考方案2】:

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

为了解决这里,我跑了

docker container prune
docker image prune

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

如果不成功可以尝试删除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

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;
  

运行

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

【讨论】:

这对我帮助很大!我想问一下,在您的docker-compose.prod.yml 中,应该是dockerfile: Dockerfile 还是dockerfile: Dockerfile.prod?最后,我想指出,(因为我是 Docker 新手,我花了一些时间才弄清楚,所以这可能对其他人有帮助),为了构建 Dockerfile.dev,你需要运行docker build -f Dockerfile.dev -t devimage .,然后你需要运行docker-compose -f docker-compose.dev.yml up 复制我的源文件时出错。我编辑了帖子。 酷。我仍然是 getting an error 但是,我会尝试在不降级的情况下解决这个问题,正如此处其他地方所建议的那样 rm -rf node_modules && yarn 帮了我【参考方案3】:

所以有两种方法可以解决这个问题:

从 React 17 和 react-scripts 4.0 降级

我之所以这样做,是因为我不想从 CRA 中退出(原因很明显)。 问题是由于我使用的样式库不能很好地与 CRA 处理 Eslint 的更新方式配合使用。

可能是其他问题,但似乎来自 react-scripts 4.0

This is mentioned in the changelog for react-scripts 4.0

退出 CRA

正如@duhaime 在 cmets 中提到的那样。您可以在仍然使用 React 17 和 react-scripts 4.0 的同时直接解决此问题,方法是弹出然后删除 ESLintPlugin 或更新加载程序以解决您正在使用的任何库的问题。

我个人会推荐前者,因为我确信问题会尽快得到解决。但是这两种选择都会让你到达那里。

【讨论】:

【参考方案4】:

为我解决的问题是

    降级依赖“styled-components”和 删除依赖“redux-devtools-extension”以及 删除 Docker 兑现文件 $ docker builder prune -a

【讨论】:

OP 不使用 styled-components 或 redux-devtools-extensions 我认为第 3 步就足够了。不需要 1 和 2。

以上是关于TypeError: (0 , _schemaUtils.default) 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: (0 , _schemaUtils.default) 不是函数

Redux Saga EventChannel: TypeError: (0, _reduxSaga.take) 不是函数

未捕获的TypeError:(0,_store.configureStore)不是函数[重复]

未捕获的 TypeError: (0 , _firebase.auth) 不是函数

JEST 测试套件无法运行:TypeError: (0 , _reactRedux.connect) 不是函数

AWS Amplify 登录错误 - 登录错误... [TypeError: (0, _getRandomBase.default) 不是函数