在问这个问题之前,我看了以下问题,但我相信我是不同的,因为我没有使用Docker:Nextjs fails to find valid build in the '.next' directory in production node_env
我还尝试了this删除“ .next”文件夹的方法,但仍然遇到相同的问题。
在解决了许多其他问题之后,我只能解决一个似乎无法解决的问题。当我尝试部署到Heroku时,不断出现以下错误:
node server.js
Could not find a valid build in the '.next' directory! Try building your app with 'next build' before starting the server.
这是我的package.json文件:
{
"name": "StarterApp",
"version": "1.0.0",
"engines": {
"node": "10.4.1"
},
"description": "",
"main": "index.js",
"scripts": {
"test": "mocha",
"dev": "node server.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "4.16.3",
"fs-extra": "^5.0.0",
"ganache-cli": "^6.1.3",
"mocha": "^5.2.0",
"next": "^4.2.3",
"next-routes": "^1.4.2",
"node-gyp": "^3.7.0",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"rebuild": "^0.1.2",
"semantic-ui-css": "^2.3.2",
"semantic-ui-react": "^0.79.1",
"sha3": "^1.2.2",
"solc": "^0.4.24",
"truffle-hdwallet-provider": "0.0.3",
"web3": "^1.0.0-beta.34"
}
}
Server.js文件:
const { createServer } = require('http');
const next = require('next');
const app = next({
dev: process.env.NODE_ENV !== 'production'
});
const routes = require('./routes');
const handler = routes.getRequestHandler(app);
app.prepare().then(() => {
createServer(handler).listen(5000, (err) => {
if (err) throw err;
console.log('Ready on localhost:5000');
});
});
该应用程序在本地部署时没有问题,但是在部署到Heroku时出现此错误。我究竟做错了什么?
答案 0 :(得分:9)
npm run build
然后
npm run start
解决了我的问题。
答案 1 :(得分:5)
第一次
npm run-script build
然后
npm run start
答案 2 :(得分:2)
仔细看错误:
Error: Could not find a production build in the 'E:\Developer's Area\weatherteller\.next' directory. Try building your app with 'next build' before s at Server.readBuildId (E:\Developer's Area\weatherteller\node_modules\next\dist\next-server\server\next-server.js:146:355)
at new Server (E:\Developer's Area\weatherteller\node_modules\next\dist\next-server\server\next-server.js:3:120)
at createServer (E:\Developer's Area\weatherteller\node_modules\next\dist\server\next.js:2:638)
at start (E:\Developer's Area\weatherteller\node_modules\next\dist\server\lib\start-server.js:1:323)
at nextStart (E:\Developer's Area\weatherteller\node_modules\next\dist\cli\next-start.js:19:125)
at E:\Developer's Area\weatherteller\node_modules\next\dist\bin\next:27:115
运行时
npm start
无法找到启动下一个应用程序所需的生产版本。在使用
创建下一个应用程序时npm install next react react-dom --save
.next 文件夹未创建,因此您需要先使用
创建 .next 文件夹npm build
它将包含您所有的生产构建文件。
在 npm build 之后,将创建文件夹,您可以使用
运行您的应用程序npm start
另外,请确保这些脚本在您的下一个应用中
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start"
},
希望这能解决你的错误??
答案 3 :(得分:0)
NextJS构建可能(取决于您的项目大小),非常大,这可能会在部署期间花费您金钱。
您可以将以下内容应用于package.json
{
"script": {
"build": "next build",
"heroku-postbuild": "npm run build",
"start": "next start"
}
}
答案 4 :(得分:0)
我在设置后尝试从构建目录启动生产服务器时遇到此错误。
distDir: 'build',
实际错误
<块引用>错误:在“/home/username/awesome-app/build/build”目录中找不到生产版本。在启动生产服务器之前尝试使用“下一个构建”构建您的应用程序。 https://nextjs.org/docs/messages/production-start-no-build-id
和我的启动命令
$ next start build
所以我将下一个构建目录移动到另一个名为 build 的目录并且它可以工作,并且如果您使用环境变量将该文件放在构建目录中。