如何修复 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 存储库,通常会发生此错误。
您可以尝试执行以下操作吗?
- 确保所有更改都已提交并且您有一个干净的目录。
- 运行
rm -rf node_modules
(或删除 Windows 上的文件夹)。
- 运行
git add -A
然后 git commit -m "Remove all module files"
.
- 将
node_modules
添加到您的 .gitignore
文件(并保存)。
- 运行
git add -A
然后 git commit -m "Update ignored files"
.
- 通过
git status
验证您的目录是否完全干净。
- 然后,运行
git push
。此部署应该适用于 Vercel。
- 最后,根据您的包管理器重新运行
npm i
或 yarn
以使您的本地副本正常工作。
我不得不编辑 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 上缺少模块的错误的。
- 显式安装软件包,使其出现在您的
package.json
中
- 然后将假定缺少的模块导入应用程序并使用它。
例如(只是一个场景) // 让我们假设 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 的原因。
- 删除package-lock.json (rm package-lock.json)
- 删除node_modules (rm -R node_modules)
- 切换 Node 版本,如果您通过 NVM 安装了 Node(nvm install 17,nvm use 17),这很容易
- 使用新版本的节点再次安装依赖项 (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 代码 运行 后,不再出现错误。
我的 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 存储库,通常会发生此错误。
您可以尝试执行以下操作吗?
- 确保所有更改都已提交并且您有一个干净的目录。
- 运行
rm -rf node_modules
(或删除 Windows 上的文件夹)。 - 运行
git add -A
然后git commit -m "Remove all module files"
. - 将
node_modules
添加到您的.gitignore
文件(并保存)。 - 运行
git add -A
然后git commit -m "Update ignored files"
. - 通过
git status
验证您的目录是否完全干净。 - 然后,运行
git push
。此部署应该适用于 Vercel。 - 最后,根据您的包管理器重新运行
npm i
或yarn
以使您的本地副本正常工作。
我不得不编辑 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 上缺少模块的错误的。
- 显式安装软件包,使其出现在您的
package.json
中
- 然后将假定缺少的模块导入应用程序并使用它。
例如(只是一个场景) // 让我们假设 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 的原因。
- 删除package-lock.json (rm package-lock.json)
- 删除node_modules (rm -R node_modules)
- 切换 Node 版本,如果您通过 NVM 安装了 Node(nvm install 17,nvm use 17),这很容易
- 使用新版本的节点再次安装依赖项 (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 代码 运行 后,不再出现错误。