Как исправить ошибку "модуль не найден" при деплое Next.js на Vercel
Проблема с деплоем приложения на Next.js в Vercel
У меня есть приложение на Next.js, которое работает на моем компьютере и ранее развертывалось на Vercel без проблем. Однако у меня возникла ошибка при сборке на Vercel, которая выглядит следующим образом:
Я пробовал удалить папку node_modules
и несколько раз запускал команду npm install
, но ничего не помогло.
Буду признателен за любую помощь. Спасибо!
Ошибка при запуске npm run build
:
Error: Cannot find module '../build/output/log'
Require stack:
- /vercel/5ccaedc9/node_modules/.bin/next
...
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! <email> build: next build
npm ERR! Exit status 1
npm ERR! Failed at the <email> build script.
Вот содержимое моего файла 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"
}
}
Если нужны дополнительные данные для диагностики проблемы, дайте знать!
5 ответ(ов)
Вам нужно внести изменения в ваш package.json
, чтобы использовать бинарник next
, который находится в директории node_modules/next
. Вот как это можно сделать:
"scripts": {
"start": "node_modules/next/dist/bin/next start -p $PORT"
}
Хотя это не самый элегантный способ, он работает. Если у вас есть другие проблемы или вопросы по Next.js, не стесняйтесь обращаться!
Этот ответ сработал для меня: https://stackoverflow.com/a/55541435/3051080
Суть: обновите кэш git
:
git rm -r --cached .
git add --all .
git commit -a -m "Версионирование неотслеживаемых файлов"
git push origin master
Ошибка, о которой вы говорите, обычно возникает, если вы случайно добавили папку node_modules
в репозиторий Git вашего проекта.
Попробуйте выполнить следующие шаги:
- Убедитесь, что все изменения закоммичены и у вас чистый рабочий каталог.
- Выполните команду
rm -rf node_modules
(или удалите папку на Windows). - Выполните
git add -A
, затемgit commit -m "Удалить все файлы модулей"
. - Добавьте
node_modules
в файл.gitignore
(не забудьте сохранить изменения). - Выполните
git add -A
, затемgit commit -m "Обновить игнорируемые файлы"
. - Проверьте, что ваш каталог полностью чист, с помощью
git status
. - Затем выполните
git push
. Это развертывание должно пройти успешно на Vercel. - В конце, снова выполните
npm i
илиyarn
, в зависимости от вашего менеджера пакетов, чтобы восстановить рабочую локальную копию.
У меня была такая же проблема. В GitHub Desktop я заметил, что файл с заглавной буквой в редакторе не отображался так в GitHub Desktop. Я исправил написание, чтобы оно совпадало с тем, что показывал GitHub, и проект собрался успешно.
Похоже, что ваша проблема может быть связана с конфликтами в зависимости yarn
и модулем next
, который находится в node_modules/next/dist/bin/next
.
Что касается вашего вопроса о том, почему после сборки вашего проекта с next
вы все равно зависите от относительно тяжелого модуля next
в продакшене, то это связано с тем, что next
требует выполнения некоторых операций во время выполнения, связанных с маршрутизацией, рендерингом и другими функциями. Даже после сборки проекта, next
предоставляет необходимые среда и API для работы приложения, что и объясняет его присутствие в зависимости в конечной сборке.
Хотя вы правы, что концепция сборки предполагает определенную независимость от инструментов сборки, в случае с фреймворками, такими как next
, они могут требовать сохранения части своей инфраструктуры для обеспечения корректной работы приложения в продакшене. Это позволяет избежать лишних проблем с совместимостью и гарантирует, что приложение будет функционировать как задумано.
Что делает npm install --legacy-peer-deps? Когда рекомендуется использовать и какой потенциальный случай?
В чем разница между --save и --save-dev?
React JS: невозможно передать значение в метод через onClick
Как задать переменные окружения из файла package.json?
Как указать необходимую версию Node.js в файле package.json?