【问题标题】:Nextjs fatal production only error after adding new packageNextjs 添加新包后仅出现致命错误
【发布时间】:2022-01-10 18:28:10
【问题描述】:

我们有一个 NextJs 应用程序在生产中运行了几年。

最近我添加了storybook-addon-pseudo-states插件,在本地运行代码并测试并推送到生产环境。该应用程序在本地完美运行。不管你信不信,在投入生产后,生产完全因这个奇怪的错误而下降。

{"statusCode":500,"code":"MODULE_NOT_FOUND","error":"Internal Server Error","message":"Cannot find module 'react-is'\nRequire stack:\n- /opt/webapp/node_modules/styled-components/dist/styled-components.cjs.js\n- /opt/webapp/.next/server/pages/_document.js\n- /opt/webapp/node_modules/next/dist/next-server/server/require.js\n- /opt/webapp/node_modules/next/dist/next-server/server/load-components.js\n- /opt/webapp/node_modules/next/dist/next-server/server/api-utils.js\n- /opt/webapp/node_modules/next/dist/next-server/server/next-server.js\n- /opt/webapp/node_modules/next/dist/server/next.js\n- /opt/webapp/server.js"}

这是我们的 package.json。

{
  "license": "UNLICENSED",
  "private": true,
  "scripts": {
    "dev": "NODE_ENV=development yarn server-remove-types && yarn server-watch",
    "build": "yarn server-remove-types && yarn server-compile && yarn server-copy && next build",
    "server-remove-types": "flow-remove-types --all --pretty src/server --out-dir .untyped/server",
    "server-compile": "ncc build .untyped/server/index.js --out .dist --minify --external next --external grpc",
    "server-copy": "node ./util/copy.js --from .dist/index.js --to server.js",
    "server-watch": "yarn server-watch-remove-types & yarn server-watch-compile & yarn server-watch-nodemon",
    "server-watch-nodemon": "node .dist/index.js",
    "server-watch-remove-types": "node util/watch-flow-remove-types.js --from src/server --to .untyped/server",
    "server-watch-compile": "yarn server-compile --watch",
    "lint-javascript": "eslint src",
    "format": "eslint src --fix",
    "type-install": "flow-typed install",
    "type-upgrade": "flow-typed update",
    "type-check": "flow check --color=always --show-all-errors",
    "test-unit": "NODE_ENV=test jest --config ./config/jest.unit.config.js --colors",
    "test-unit-watch": "yarn test-unit --watchAll --coverage false",
    "test-unit-update-snapshots": "yarn test-unit --updateSnapshot",
    "test-endpoints": "NODE_ENV=test jest --config ./config/jest.endpoints.config.js src/test/endpoints.spec.js",
    "test-bdd": "echo 'Not implemented.'",
    "test-contract": "echo 'Not implemented.'",
    "test-e2e": "echo 'Not implemented.'",
    "test-e2e-debug": "echo 'Not implemented.'",
    "storybook": "start-storybook -p 3001",
    "build-storybook": "build-storybook -o ./src/stories/storybook"
  },
  "engines": {
    "node": ">=12"
  },
  "browserslist": [
    "extends @dpgr/browserslist-config"
  ],
  "dependencies": {
    "@dpgr/browserslist-config": "^1.1.0",
    "@dpgr/react-components": "^3.7.0",
    "@sentry/browser": "6.10.0",
    "@sentry/node": "6.10.0",
    "@sentry/tracing": "6.10.0",
    "@tippy.js/react": "^2.2.3",
    "@vercel/ncc": "^0.31",
    "axios": "0.18.1",
    "babel-plugin-superjson-next": "^0.3.1",
    "chart.js": "^2.9.4",
    "chokidar": "^3.3.1",
    "color": "^3.1.0",
    "convert-array-to-csv": "^1.0.9",
    "cookie": "^0.4.0",
    "date-fns": "^2.4.1",
    "dompurify": "^2.0.2",
    "draft-js": "^0.11.0",
    "draft-js-export-html": "^1.3.3",
    "draft-js-import-html": "^1.3.3",
    "fastify": "^2.0.0",
    "fastify-cookie": "^3.0.2",
    "flow-remove-types": "^2.115.0",
    "focus-visible": "^5.0.0",
    "formik": "^1.3.2",
    "fs": "^0.0.1-security",
    "google-protobuf": "^3.14.0",
    "grpc": "^1.24.4",
    "grpc-web": "^1.2.1",
    "http-status-codes": "^1.3.0",
    "iban": "^0.0.14",
    "jsonwebtoken": "^8.5.1",
    "lodash": "^4.17.11",
    "minimist": "^1.2.0",
    "mkdirp": "^0.5.1",
    "next": "^10.0.0",
    "next-cookies": "^2.0.3",
    "next-redux-wrapper": "^7.0.0",
    "node-xlsx": "^0.15.0",
    "nodemon": "^2.0.2",
    "nprogress": "^0.2.0",
    "openid-client": "^3.13.0",
    "p-queue": "^6.2.1",
    "path-to-regexp": "^6.2.0",
    "re-reselect": "^3.0.0",
    "react": "^17.0.1",
    "react-aria-modal": "^4.0.0",
    "react-chartjs-2": "^2.11.1",
    "react-copy-to-clipboard": "^5.0.1",
    "react-datepicker": "^3.0",
    "react-dom": "^17.0.1",
    "react-paginate": "^6.3.0",
    "react-redux": "^7.2.2",
    "react-select": "^3.0.8",
    "redux": "^4.0.0",
    "redux-saga": "^1.1.1",
    "regenerator-runtime": "^0.13.3",
    "reselect": "^4.0.0",
    "styled-components": "^5.0.0",
    "styled-reboot": "^4.0.1",
    "superjson": "^1.7.5",
    "uuid": "^3.3.2",
    "xlsx": "^0.17.1",
    "yup": "^0.28.0"
  },
  "devDependencies": {
    "@babel/core": "^7.13.15",
    "@babel/eslint-parser": "^7.13.14",
    "@babel/helper-builder-react-jsx": "^7.15.4",
    "@babel/helper-builder-react-jsx-experimental": "^7.12.11",
    "@babel/plugin-transform-flow-strip-types": "^7.4.4",
    "@storybook/addon-actions": "6.3.12",
    "@storybook/addon-controls": "^6.3.12",
    "@storybook/addon-essentials": "6.3.12",
    "@storybook/addon-links": "6.3.12",
    "@storybook/react": "6.3.12",
    "@testing-library/jest-dom": "^5.11.9",
    "@testing-library/react": "12.0.0",
    "@testing-library/react-hooks": "7.0.1",
    "@wojtekmaj/enzyme-adapter-react-17": "^0.4.1",
    "babel-loader": "^8.0.5",
    "babel-plugin-inline-react-svg": "^1.1.1",
    "babel-plugin-module-resolver": "^4.0",
    "babel-plugin-styled-components": "^1.10.0",
    "css-loader": "6.4.0",
    "enzyme": "^3.11.0",
    "enzyme-to-json": "^3.6.1",
    "eslint": "^7.24.0",
    "eslint-config-airbnb": "^18.0.1",
    "eslint-import-resolver-babel-module": "^5.3.0",
    "eslint-plugin-flowtype": "^4.3.0",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-jest": "^23.1.1",
    "eslint-plugin-jsx-a11y": "^6.0.3",
    "eslint-plugin-react": "^7.11.1",
    "eslint-plugin-react-hooks": "^4.2",
    "fastify-http-proxy": "^2.1.0",
    "flow-bin": "^0.110.0",
    "flow-typed": "^2.4.0",
    "jest": "^26.6.3",
    "jest-styled-components": "^7.0.5",
    "mockdate": "^2.0.5",
    "pretty": "^2.0.0",
    "redux-devtools-extension": "^2.13.9",
    "redux-mock-store": "^1.5.3",
    "redux-saga-test-plan": "^4.0.1",
    "redux-testkit": "^1.0.6",
    "storybook-addon-designs": "6.2.0",
    "storybook-addon-next-router": "3.0.8",
    "style-loader": "3.3.0",
    "supertest": "^6.1.6"
  },
  "peerDependencies": {}
}

这些是对 package.json 所做的唯一更改,以及故事书故事中的一些小更改。

Changes to package.json

知道这个致命的仅生产错误的根本原因是什么吗?

【问题讨论】:

  • 在本地运行next build && next start(或运行生产应用程序的任何等效项)时,您能否重现该问题?

标签: javascript node.js reactjs next.js modulenotfounderror


【解决方案1】:

错误表明您缺少库 react-is,并且根据您的 package.json,它似乎没有安装。

在安装包后想到的两种解释错误的场景/仅在生产中。

场景 1

有人可能在最后一次包管理器同步之后和您的屏幕截图之前的某个时间点从package.json 中手动删除了react-is

包管理器在执行安装、更新和卸载时同步 package.json 中的更改。这意味着,当您添加故事书插件时,它会删除 react-is 包,因为它不再列在 package.json 文件中。

场景 2

由于它仅在生产中发生,因此应用可能未使用 react-is,但它仍包含在文件中。

import ReactIs from 'react-is'

在您的应用中搜索 react-is - 如果未使用,请删除未使用的语句 - 如果已使用,则需要安装包。

【讨论】:

  • react-is 不会在代码的任何地方直接使用或导入。它是依赖的依赖。我看到它在提交前后存在于 yarn.lock 文件中。因为它是一个依赖项,所以我在捆绑的 _document.js 文件中看到了一个“require('react-is)”。没有解决并抛出错误。但是由于'react-is'在提交前后都在yarn.lock中,我不知道为什么它不能解决它。
  • 尝试删除你的 yarn.lock 并告诉 yarn 使用类似 yarn upgrade 的命令重建文件
猜你喜欢
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 2017-09-08
  • 2020-09-24
相关资源
最近更新 更多