如何修复 Next.js Vercel 部署模块未找到错误

How to fix Next.js Vercel deployment module not found error

我的 next.js 应用程序可以在我的机器上运行,并且在部署在 Vercel 上时可以正常运行,但现在在 Vercel 上构建时失败并出现以下错误:

我尝试删除 node_modules 和 运行 npm install 几次,但没有任何乐趣。

任何帮助将不胜感激。谢谢!

Running "npm run build" 20:43:24.926
tdwcks@1.0.0 build /vercel/5ccaedc9 20:43:24.926
next build 20:43:24.967
internal/modules/cjs/loader.js:983 20:43:24.967
throw err; 20:43:24.967
^ 20:43:24.967
Error: Cannot find module '../build/output/log' 20:43:24.967
Require stack: 20:43:24.967
- /vercel/5ccaedc9/node_modules/.bin/next 20:43:24.967
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:980:15) 20:43:24.967
at Function.Module._load (internal/modules/cjs/loader.js:862:27) 20:43:24.967
at Module.require (internal/modules/cjs/loader.js:1042:19) 20:43:24.967
at require (internal/modules/cjs/helpers.js:77:18) 20:43:24.967
at Object. (/vercel/5ccaedc9/node_modules/.bin/next:2:46) 20:43:24.967
at Module._compile (internal/modules/cjs/loader.js:1156:30) 20:43:24.967
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10) 20:43:24.967
at Module.load (internal/modules/cjs/loader.js:1000:32) 20:43:24.967
at Function.Module._load (internal/modules/cjs/loader.js:899:14) 20:43:24.967
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12) { 20:43:24.967
code: 'MODULE_NOT_FOUND', 20:43:24.967
requireStack: [ '/vercel/5ccaedc9/node_modules/.bin/next' ] 20:43:24.967
} 20:43:24.969
npm ERR! code ELIFECYCLE 20:43:24.969
npm ERR! errno 1 20:43:24.970
npm ERR! tdwcks@1.0.0 build: next build 20:43:24.970
npm ERR! Exit status 1 20:43:24.970
npm ERR! 20:43:24.970
npm ERR! Failed at the tdwcks@1.0.0 build script. 20:43:24.970
npm ERR! This is probably not a problem with npm. There is likely additional logging output above. 20:43:24.974
npm ERR! A complete log of this run can be found in: 20:43:24.974
npm ERR! /vercel/.npm/_logs/2020-06-17T19_43_24_971Z-debug.log 20:43:24.979
Error: Command "npm run build" exited with 1 20:43:25.342
[dmesg] follows: 20:43:25.342
[ 962.449223] ecs-bridge: port 1(veth2a021300) entered disabled state 20:43:25.342
[ 962.453655] device veth2a021300 entered promiscuous mode 20:43:25.342
[ 962.457686] ecs-bridge: port 1(veth2a021300) entered blocking state 20:43:25.342
[ 962.462004] ecs-bridge: port 1(veth2a021300) entered forwarding state 20:43:26.242
Done with "package.json"

这是我的 Package.json

{
  "name": "tdwcks",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "next",
    "build": "next build",
    "start": "next start"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "cjs": "0.0.11",
    "core-util-is": "^1.0.2",
    "framer-motion": "^1.11.0",
    "gray-matter": "^4.0.2",
    "next": "^9.4.4",
    "raw-loader": "^4.0.1",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-ga": "^3.0.0",
    "react-markdown": "^4.3.1",
    "react-player": "^2.2.0",
    "react-scripts": "^3.4.1"
  },
  "devDependencies": {
    "postcss-preset-env": "^6.7.0",
    "tailwindcss": "^1.4.6"
  }
}

创建一个 .gitignore 文件,然后向其中添加 .next 文件夹怎么样?

我遇到了完全相同的问题。我认为这可能是 Vercel 部署基础设施的内部问题。注意它失败的行:

Error: Cannot find module '../build/output/log' 20:43:24.967
Require stack: 20:43:24.967
- /vercel/5ccaedc9/node_modules/.bin/next 20:43:24.967

我的问题是昨天开始的,非常出乎意料——即非常简单的提交。就我而言,之前成功的部署也失败了。同样,删除项目并重新开始也无济于事。我正在与 Vercel 支持人员沟通,但他们尚未确认问题已解决或提供任何类型的解决方案。

我好像 运行 遇到了同样的错误。

奇怪的是,我整个周末都在 Vercel 上构建,没有任何问题,直到我将 Tailwind CSS 添加到我的项目后它才开始失败。

使用 Tailwind CSS 添加的第一个构建成功,但未加载样式。

您仍然可以在 https://rolfmadsen.now.sh/ 看到结果。

使用“vercel dev”的本地构建仍然 运行 完美。

https://github.com/rolfmadsen/search

查看存储库

构建日志错误:

22:28:35.104  
Running "npm run build"
22:28:35.287  
> search@0.1.0 build /vercel/6ddf29b8
22:28:35.287  
> next build
22:28:35.328  
internal/modules/cjs/loader.js:983
22:28:35.329  
  throw err;
22:28:35.329  
  ^
22:28:35.329  
Error: Cannot find module '../build/output/log'
22:28:35.329  
Require stack:
22:28:35.329  
- /vercel/6ddf29b8/node_modules/.bin/next
22:28:35.329  
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:980:15)
22:28:35.329  
    at Function.Module._load (internal/modules/cjs/loader.js:862:27)
22:28:35.329  
    at Module.require (internal/modules/cjs/loader.js:1042:19)
22:28:35.329  
    at require (internal/modules/cjs/helpers.js:77:18)
22:28:35.329  
    at Object.<anonymous> (/vercel/6ddf29b8/node_modules/.bin/next:2:46)
22:28:35.329  
    at Module._compile (internal/modules/cjs/loader.js:1156:30)
22:28:35.329  
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)
22:28:35.329  
    at Module.load (internal/modules/cjs/loader.js:1000:32)
22:28:35.329  
    at Function.Module._load (internal/modules/cjs/loader.js:899:14)
22:28:35.329  
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12) {
22:28:35.329  
  code: 'MODULE_NOT_FOUND',
22:28:35.329  
  requireStack: [ '/vercel/6ddf29b8/node_modules/.bin/next' ]
22:28:35.329  
}
22:28:35.331  
npm ERR! code ELIFECYCLE
22:28:35.331  
npm ERR! errno 1
22:28:35.332  
npm ERR! search@0.1.0 build: `next build`
22:28:35.332  
npm ERR! Exit status 1
22:28:35.332  
npm ERR! 
22:28:35.332  
npm ERR! Failed at the search@0.1.0 build script.
22:28:35.332  
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
22:28:35.336  
npm ERR! A complete log of this run can be found in:
22:28:35.336  
npm ERR!     /vercel/.npm/_logs/2020-06-21T20_28_35_332Z-debug.log
22:28:35.342  
Error: Command "npm run build" exited with 1

我遇到了同样的问题。在我的 github 桌面上,我注意到一个在编辑器中大写的文件不在 github 桌面上。修复了拼写以匹配 github 上显示的内容,项目构建成功。

如果您不小心将 node_modules 提交到项目的 Git 存储库,通常会发生此错误。

您可以尝试执行以下操作吗?

  1. 确保所有更改都已提交并且您有一个干净的目录。
  2. 运行 rm -rf node_modules(或删除 Windows 上的文件夹)。
  3. 运行 git add -A 然后 git commit -m "Remove all module files".
  4. node_modules 添加到您的 .gitignore 文件(并保存)。
  5. 运行 git add -A 然后 git commit -m "Update ignored files".
  6. 通过 git status 验证您的目录是否完全干净。
  7. 然后,运行git push。此部署应该适用于 Vercel。
  8. 最后,根据您的包管理器重新运行 npm iyarn 以使您的本地副本正常工作。

我不得不编辑 package.json 以使用 node_modules/next 目录中提供的 next 二进制文件:

"scripts": {
  "start": "node_modules/next/dist/bin/next start -p $PORT"
}

不是最优雅的修复,但它有效。

在我的例子中,它看起来像是与 yarn 和下一个依赖项有关,即在 node_modules/next/dist/bin/next 内部有关于某事的冲突信息。

一直不太明白为什么在使用 next 并将我们的代码构建到生产环境之后,我们仍然必须依赖(相对)繁重的模块 next

进行构建的整个概念都应该独立于构建工具。

我是如何解决 Vercel 上缺少模块的错误的。

  1. 显式安装软件包,使其出现在您的 package.json
  2. 然后将假定缺少的模块导入应用程序并使用它。

例如(只是一个场景) // 让我们假设 lodash 据说是缺少的模块,

1 确保它存在于您的 package.json

"dependencies": {
    // some dependencies ...
    "lodash": "^4.17.20",
    // some other dependencies ...
},

2 在您的应用程序中导入并使用它(通常,我只是 console.log 在 non-production 环境中导入。)

import LODASH from 'lodash'

if (process.env.NODE_ENV !== 'production') console.log(LODASH)

我用小写字母创建了文件夹,然后用大写字母重命名它,更新了所有导入,但是,由于某种原因,Github 在我推送更改时没有更新文件夹名称。我需要用不同的名字重命名。成功了。

这个答案对我有用:

TL;DR;更新 git cache:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning untracked files"
git push origin master

对我来说,这是那个特定包的问题,​​当我在 package.json 和 node_modules 下查找时,我找不到它。即使它以某种方式在本地构建中工作。

我尝试了以上所有问题,但没有任何效果。

当我更改next.js的版本后问题就解决了。万一有人正在寻找解决方案,但没有任何效果...

我在 vercel 中添加了一个 NODE_ENV="production" 环境变量,它为我处理了一切。一旦我删除它,事情就恢复了。

如果执行node_modules/next/dist/bin/next程序运行正常,应该怀疑是文件符号link坏了
就我而言,它发生在 AWS 部署期间,并且发生在压缩文件以进行部署的过程中。
因此,我能够通过在压缩过程中添加 symlinks 选项来解决问题,如下所示。

zip -r --symlinks xxxx

如果像我一样部署在AWS等服务器上,下载实际分发的程序并 检查 node_modules/.bin/next 文件。如果符号 link 损坏,您需要在部署过程中查找并修复损坏 link 的原因。

cf)https://github.com/vercel/next.js/discussions/14897#

  1. 删除package-lock.json (rm package-lock.json)
  2. 删除node_modules (rm -R node_modules)
  3. 切换 Node 版本,如果您通过 NVM 安装了 Node(nvm install 17,nvm use 17),这很容易
  4. 使用新版本的节点再次安装依赖项 (npm install)

我 运行 在服务器 运行 节点 16.15.0 LTS 上遇到这个问题,在我的本地计算机节点 v16.12.0 上,在另一台服务器上 运行 节点 v12.22.10而且它没有给出错误。

查看了我的依赖项并决定切换到 Node 17。

devDependencies": {
    "@types/node": "17.0.23",
    "@types/react": "17.0.43",

按照上述步骤并成功使用 Node 17 代码 运行 后,不再出现错误。